Short Answer
A fully automated Make.com scenario that captures PayPal sales, creates or updates contacts in Xero, generates authorized invoices, and records merchant fees as separate bank transactions, ensuring your Xero balance matches PayPal to the cent.
The Problem
Manual entry of PayPal transactions into Xero often leads to reconciling errors, specifically regarding PayPal's merchant fees which are deducted before the net amount hits the bank. Businesses struggle to match the gross sale, the fee expense, and the final bank deposit accurately.
The Outcome
A fully automated Make.com scenario that captures PayPal sales, creates or updates contacts in Xero, generates authorized invoices, and records merchant fees as separate bank transactions, ensuring your Xero balance matches PayPal to the cent.
Step-by-Step Guide
1. **Create New Scenario**: Log into Make.com, click 'Create a new scenario', and name it 'PayPal to Xero Ledger Sync'.
2. **Configure PayPal Trigger**: Search for the 'PayPal' module and select 'Watch Transactions'. Create a Webhook connection. Note: Ensure your PayPal Developer App has 'Webhook' permissions enabled.
3. **Add a Router**: Place a Router module after PayPal to distinguish between 'Completed' sales and 'Refunded' transactions using Filters.
4. **Xero Connection**: Add the 'Xero' module: 'Search for Contacts'. Connect your Xero account and organization. Map the PayPal `Payer Email` to the Xero `Email Address` field.
5. **Contact Logic**: If no contact is found (use a Filter `Contact ID` Does not exist), add a 'Xero: Create a Contact' module using PayPal's `First Name` and `Last Name` mapping.
6. **Create Invoice**: Add 'Xero: Create an Invoice'. Map `Transaction ID` to `Invoice Number` (to prevent duplicates) and `Amount` to the Unit Price. Set status to 'Authorised'.
7. **Handle Merchant Fees**: Add a 'Xero: Create a Bank Transaction' module. Set the Type to `SPEND`. Map the PayPal `Fee Amount` to this module. This ensures the Net amount in your Xero PayPal Bank Account matches reality.
8. **Data Formatting**: Use Make's `parseNumber()` function on the PayPal `Gross Amount` and `Fee` to ensure the data is passed as a decimal rather than a string.
9. **Error Handling**: Right-click on the Xero modules and select 'Add error handler'. Use the 'Ignore' or 'Rollback' directive to manage API timeouts or duplicate key errors.
10. **Enable Scenario**: Save the scenario and toggle the 'Scheduling' switch to ON. Set the frequency to 'Immediately' for Webhooks.
Data Mapping
| PayPal Field (Source) | Xero Field (Destination) | Transformation / Logic |
| :--- | :--- | :--- |
| `Payer Email` | `Contact Email Address` | Used for `Search Contacts` module |
| `Transaction ID` | `Invoice Number/Reference` | Use as Unique ID to prevent double-entry |
| `Gross Amount` | `Line Item -> Unit Amount` | `parseNumber(item_amount)` to ensure numeric format |
| `Fee Amount` | `Bank Transaction -> Amount` | Map to 'Bank Fees' Chart of Account in Xero |
| `Currency Code` | `Currency` | Required if using Xero Multi-Currency |
| `Transaction Time` | `Date` | `formatDate(time; YYYY-MM-DD)` |
Gotchas & Failure Modes
* **The String Trap**: PayPal often sends amounts as strings (e.g., "10.00"). Use the Make.com math tool `{{parseNumber(1.amount)}}` to avoid Xero validation errors.
* **Duplicate Invoices**: Xero will error if you try to create an invoice with a duplicate `InvoiceNumber`. Always map the PayPal Transaction ID to the Invoice Number field as a natural deduplicator.
* **Connection Timeouts**: Xero's API can be sensitive. Always use 'Break' or 'Retry' error handlers on Xero modules to manage 500/503 errors without stopping the scenario.
* **Rounding Differences**: Occasionally, tax calculations in PayPal differ from Xero by $0.01. Use a 'Rounding' adjustment line item in Xero if your gross totals don't match exactly.
Verification Checklist
- [ ] Run a test transaction in PayPal Sandbox or a $1 live transaction.
- [ ] Check Make.com 'Operations' log to ensure the Router correctly branched the data.
- [ ] Confirm in Xero that the Contact was found or created without duplicates.
- [ ] Verify the Invoice status is 'Authorised' and contains the PayPal Transaction ID.
- [ ] check the 'Bank Account' in Xero to ensure the Merchant Fee was recorded as a 'Spend Money' transaction.
Ready to Automate?
Build this automation with Make.com in minutes.