# Fetch invoices from supplier portals and post them to QuickBooks

> Sign in to each supplier portal once, then pull every waiting invoice into a review queue and post it to QuickBooks with the document filed in Drive.

- Workflow type: app
- Services: Airtop, QuickBooks Online, Google Drive
- Categories: Finance, Operations
- Published: 2026-08-14

## What it does

- Lists every supplier portal you have connected, when it was last checked, and how many invoices are sitting there waiting to be collected.
- Signs in to each portal once and remembers it, so later collections open the portal already logged in and never ask for a password again.
- Pulls invoice number, date, supplier, net, tax, and the invoice document from every page of the portal's invoice list, and keeps a screenshot of exactly what the portal displayed as an audit trail.
- Posts the lines your clerk approves into QuickBooks Online as bills, files each document into a folder per supplier and month in Google Drive, and refuses to post anything it has already imported.

## What you'll need

- An Airtop account, which provides the cloud browser that opens each supplier portal.
- A QuickBooks Online company where the bills should be created.
- A Google Drive account, plus a folder you want invoice documents filed into.
- The web address of each supplier portal's invoice list page, and a login for each portal that someone enters once during setup.

## Prompt

I want an accounts payable app for the invoices that only ever live inside supplier portals and never arrive by email. Most of our suppliers give us a web portal and no API, so today someone logs into each one by hand, filters to find the new invoices, downloads them one at a time, and retypes the invoice numbers, dates and totals into the accounting system. This app should replace that entire loop with one screen.

The home screen is a list of every supplier portal we have connected. Each row shows the portal name, the supplier it belongs to, when it was last checked, how many invoices are currently waiting, and a Fetch button. Make the waiting count the most prominent thing on the row, and show a quiet 'never checked' state for portals that have just been connected.

Connecting a new portal is the setup flow. The person enters a portal name and the web address of that portal's invoice list page. The app then uses Airtop Create Session and Create Window to open that page in a cloud browser, and Get Window Info to obtain the live view URL, which the app embeds so the person can see the real browser and log in themselves, including any two-step verification. When they confirm they are logged in, the app calls Save Profile on Termination with a profile name it stores against that portal, so the signed-in state is kept. Every future fetch passes that same profile name to Create Session and lands already logged in. In the interface, describe this to the user as 'sign in once and we remember it'. Never use the words profile, cookie, or session in anything the user reads.

Clicking Fetch on a portal runs Create Session with that portal's saved sign-in, Create Window on the stored invoice list URL, and then Paginated Extraction to pull the invoice rows across every page of the list, following that portal's pagination or infinite scroll. Ask it for invoice number, invoice date, supplier name, net amount, tax amount, and the link to the invoice document on each row. Use Query Page for any value that is not present on the list page and has to be read from an individual invoice detail page. Run Take Screenshot on the list page and store the image against that fetch as an audit trail of exactly what the portal displayed at that moment. Terminate the session when the fetch finishes so we are not billed for idle browser time.

Results land in a review table, one row per invoice, grouped by portal. Each row shows invoice number, date, supplier, net, tax, gross, a link that opens the invoice document, and an editable account code field. The AP clerk works down the table, checks each line, corrects the account coding, and clicks Post on the rows they are happy with. Let them select several rows and post them together. Nothing is ever posted automatically, the clerk always decides.

Post writes the invoice into QuickBooks Online with Create Bill, using the supplier, the invoice number as the bill number, the invoice date, and the net and tax amounts against the chosen account code. If the app has no QuickBooks vendor ID stored for that supplier yet, run Create Vendor first and save the returned vendor ID against the supplier so later bills reuse it directly. Then file the document into Google Drive: if there is no stored folder for that supplier and month, run Create Folder to create a folder for the supplier and a month folder inside it, under a configured parent folder, and save the returned folder IDs. Then run Upload File (Multipart) to place the invoice document into that month folder, and store the resulting Drive link on the invoice row.

The app must keep its own permanent record of every invoice it has posted, keyed by supplier and invoice number, along with the QuickBooks bill ID, the amount, the date it was posted, and the Drive link. When a fetch returns an invoice number that is already in that record, the row shows a clear 'already imported' state, the Post button is disabled on that row, and it links through to the bill that was already created. This has to hold even when someone re-fetches a portal that lists the last twelve months of invoices, so a repeat fetch can never double-post. Look up by supplier and invoice number rather than by document link, because portals regenerate document links.

Compare each fetched invoice against the last bill posted for that same supplier. If the amount has increased by more than a configurable percentage, defaulting to twenty percent, flag the row with a visible warning showing the previous amount, the new amount, and the size of the jump, so the clerk looks twice before posting. The threshold should be editable in settings both as a global default and per supplier. Flagged rows are still postable, the flag is a prompt to check rather than a block.

Settings hold the Google Drive parent folder, the naming pattern for the supplier and month folders, the default account code per supplier, and the price jump thresholds. Persist the connected portals, the saved sign-in name for each, fetch history with its screenshots, the posted invoice record, the supplier to vendor ID mappings, and the Drive folder IDs. Every AP clerk in the workspace sees the same portals and the same posted history. This is a shared team tool, not a per-person one.

## How to customize

- Change the price jump percentage that flags an invoice for a second look, either as a company-wide default or per supplier.
- Choose the Drive folder invoices are filed into, and how the supplier and month folders are named.
- Set a default account code per supplier so most lines arrive in the review queue already coded.

## FAQ

### Will this work with supplier portals that have no API?

Yes, and that is the whole point. Most supplier and customer portals offer no way to connect to them programmatically, which is why finance teams end up downloading invoices by hand. This app drives a real browser the same way a person would, so any portal you can log into and read invoices from is fair game.

### Do I have to enter the portal password every time we collect invoices?

No. Someone signs in once when the portal is first connected, including any two-step verification, and the app remembers that signed-in state. Every collection after that opens the portal already logged in.

### What stops it from posting the same invoice twice?

The app keeps its own record of every invoice number it has posted for each supplier. If a collection turns up an invoice that is already in that record, the row is marked as already imported, the Post button is switched off for it, and it links to the bill that was created the first time. Portals that show a rolling twelve months of history can be re-collected safely.

### What happens if the supplier is not set up in QuickBooks yet?

The app creates the supplier record in QuickBooks first, then posts the bill against it, and remembers the link so future invoices from that supplier go straight through.

### Can anything get posted to the books without a person checking it?

No. Collected invoices land in a review queue where your AP clerk checks each line and edits the account coding. Nothing reaches QuickBooks until someone clicks Post. Invoices whose amount jumped against that supplier's last bill are flagged so they get a closer look first.

Use this prompt in General Input: https://www.generalinput.com/prompts/fetch-invoices-from-supplier-portals-and-post-them-to-quickbooks