# Send Paige invoices to Xero with Zapier or Make

Build the Zap or Make scenario that watches Paige's SFTP export folder, creates the bill in Xero from Paige's extracted fields, and attaches the PDF — so every invoice Paige finishes becomes a Xero bill on its own.

Product: paige · Audience: user · Time: 1 hour · Last verified: 2026-09-05

Canonical: https://help.ademero.com/paige/integrations/send-paige-invoices-to-xero-with-zapier-or-make

**At the end of this guide, every invoice Paige finishes becomes a bill in Xero within minutes — contact set, dates and total filled, invoice number as the reference, PDF attached — with no data entry.**

The automation is: *SFTP trigger → keep only the data file → read the values → fetch the PDF → create the bill with the PDF attached.* Paige uploads the PDF before the data file, so the PDF is always there when the automation fires.

## Step 1 — Point Paige at your SFTP server

1. In Paige, open **Settings** (the gear at the bottom of the left menu — administrators only), pick the scan job, and choose **Export**.
2. Click the **FTP** card. Enter the **FTP Address**, **Port** `22`, **Username**, **Password**, and in **FTP Folder Path** a folder for this scan job, such as `/paige/invoices`.
3. Click **Test Connection**. **What you should see:** `FTP connection successful!` Connect — `Connected to FTP Server!` and a green **Connected** label.
4. Turn on **Enable Auto Export**. Under **Auto Export Settings**, pick your invoice type under **Document Types**, set **Auto Field Entry Complete** to **Yes**, and set **Human Reviewed** to **Reviewed** so a person glances at each invoice in Paige before it becomes a bill. Click **Save**.

Open port 22 on your firewall to Paige's address ranges — [Outbound IP ranges for firewall allow-lists](/paige/document-processing/outbound-ip-ranges-for-firewall-allow-lists).

## Step 2 — Check Paige's fields cover a bill

| Bill needs | Paige field |
| --- | --- |
| Contact | `Vendor Name` — spelled as the contact is in Xero, or a new contact is created with the invoice's spelling |
| Date | `Invoice Date` |
| Due date | `Due Date` |
| Reference | `Invoice Number` |
| Line: description, quantity, unit price, account, tax rate | `Total` for the price; description, account, and tax rate are set in the automation |

Values export as text exactly as printed. The automation converts dates and strips currency symbols.

## Step 3 — Build the automation

### Zapier

1. **Trigger:** **SFTP by Zapier → New or Updated File** (connection: **Host**, **Username**, **Port Number** 22, **Password**), folder = the scan job's folder.
2. **Filter by Zapier:** *File Name* **(Text) Ends with** `.json`.
3. **Code by Zapier → Run Javascript**, `file` mapped to the trigger's file:
   
   ```javascript
   const doc = await (await fetch(inputData.file)).json();
   const f = doc.fields;
   return {
     pdf_file: doc.metadata.pdf_file,
     contact: f["Vendor Name"],
     reference: f["Invoice Number"],
     date: f["Invoice Date"],
     due_date: f["Due Date"] || "",
     total: (f["Total"] || "").replace(/[^0-9.\-]/g, "")
   };
   ```

4. **SFTP by Zapier → Download File**, path = the folder plus `pdf_file` from step 3.
5. **Xero → Create Bill.** Map **contact_name** to `contact`, **date** and **due_date** to the dates (run them through **Formatter by Zapier → Date/Time → Format** to `YYYY-MM-DD` first if Xero rejects the printed format), **Reference** to `reference`, **status** to *Draft* (or *Submitted* if you want them awaiting approval), and one line item: **Description** `Invoice {{reference}}`, **Quantity** `1`, **Unit Price** `total`, **Account** your purchases account, **Tax Rate** your usual purchase tax rate. Set **attachment** to the Download File output from step 4 — Xero's Create Bill takes the PDF directly.
6. Turn the Zap on.

### Make

1. **SFTP → Watch files in a folder** (connection: **Host**, **Port** 22, **Auth Type** *Username and Password*), pointed at the scan job's folder.
2. Filter: *File name* **Ends with** `.json`.
3. **SFTP → Get a file**, then **JSON → Parse JSON** on its data. Run once with a real file so Make learns the fields.
4. **Xero → Search for contacts** by name; if none is found, create the contact first with a router branch.
5. **Xero → Create an invoice** with the type set to a bill (accounts payable), the contact from module 4, `parseDate()` of the dates, the invoice number as reference, and one line with description, quantity 1, `parseNumber()` of the total, your purchases account, and tax rate.
6. **SFTP → Get a file** with path = folder plus parsed `metadata.pdf_file`, then **Xero → Upload a file** attached to the bill from module 5.
7. Set the schedule and turn the scenario on.

## Step 4 — Test it

1. Process one invoice through the scan job in Paige, review it, and wait for the export.
2. Check the automation's run history: one run, every step green.
3. In Xero, open **Business > Bills to pay** (the **Draft** or **Awaiting approval** tab, depending on the status you chose). **What you should see:** the bill with the contact, dates, reference, and total from the invoice, and the PDF on its attachment icon.

## When it doesn't work

| Symptom | Where to look |
| --- | --- |
| The automation never runs | Wrong folder, or a subfolder. |
| Runs four times per invoice | The `.json` filter is missing. |
| Create Bill fails on a date | Convert Paige's printed date to `YYYY-MM-DD` before mapping. |
| Create Bill fails on the amount | A currency symbol or thousands separator slipped through; the Code step strips them — check the field name matches your Paige field exactly. |
| A duplicate contact appears | The invoice spells the supplier differently from the Xero contact. Correct it in Paige during review; merge in Xero. |
| No attachment | The PDF path is wrong — it must be the folder plus `pdf_file` from the data, not the trigger file's name. Xero allows 10 attachments per bill. |
| Nothing arrives from Paige | Auto-export criteria aren't met, or the invoice was processed before you enabled auto export. Export once from the **Documents** page with **Export** and tick **FTP**. |

If the Paige side is the problem, contact Ademero support with the scan job name and the message from **Test Connection**.

## What's next

- [Connect Paige to Xero](https://help.ademero.com/paige/integrations/connect-paige-to-xero)
- [Write extraction guidance the AI can follow](https://help.ademero.com/paige/document-processing/write-extraction-guidance-the-ai-can-follow)
