Check the Bill Before You Pay It
Compare every supplier bill to the price they sent, before the money leaves your account.

This guide is for people who run or work in an online store and pay suppliers every month: shop owners, finance and operations staff, and agencies. PilotDeck is an open-source AI agent workspace licensed AGPL-3.0. You save last month's bills and each company's price email or price list as files, paste one prompt, and get a sheet with one row per bill, marked Fine or Needs a look with a one-line reason. The software is free. The AI model behind it is not: you either pay for an API key or run a model on your own computer. It checks bills only against the prices you give it, so it cannot tell you whether the price you were sent was right. PilotDeck marks the bills. A person decides what gets paid.
The bill that looks fine
A courier's September bill arrives as one number: $1,485. You pay it. Back in June, the same courier emailed you its rate: $4.50 a parcel. The bill charged $4.95 for 300 parcels. At $4.50, those 300 parcels would have cost $1,350. The $135 gap appears nowhere on the bill, because the bill shows one total.
This is a fictional store, Tidewell Goods, used throughout this guide. The situation is real for any business that buys from suppliers. Checking a bill properly means finding the old email, finding the price, multiplying by the quantity and comparing. Do that for the courier, the box maker, the storage company and everyone else, and it takes hours. So bills get paid as they arrive.
One data point on how common this is. The 2026 Global Overpayment Report from apexanalytix analysed records of $3.25 trillion in spend and more than 400 million invoices. It lists duplicate payments (18% of lost profit) and pricing discrepancies (13% of lost profit) among the top causes of overpayment. The sample is a cross-section of the world's largest companies. It says nothing about small online stores, so read it as a reason to check, not as a statistic about you.
This guide gives you one workflow that does the check for you. PilotDeck reads the bills and the price files, compares them, and writes a sheet. You look at the flagged rows and decide.
Completion test: take any supplier bill from last month. Within two minutes you can see which price it was checked against, whether the quantity fits that price, whether there is any extra charge, and whether the same bill showed up twice. If you cannot, the check is not working yet.
What PilotDeck is, in plain words
PilotDeck is an open-source AI agent workspace. An agent is an AI that works through a task on its own, reading files and writing results, instead of only answering one question at a time. PilotDeck was open-sourced on May 28, 2026 and is developed jointly by Tsinghua University's THUNLP, ModelBest, OpenBMB and AI9Stars.
Repository: github.com/OpenBMB/PilotDeck
The licence is AGPL-3.0, a standard open-source licence. When this guide was checked on October 22, 2026, the repository showed about 4,000 GitHub stars and 455 forks. Stars show interest. They do not show that it is ready for your business.
Four terms cover everything in this guide.
Project. PilotDeck organises work into projects, which it calls WorkSpaces. Each one has its own files, memory and skills, so one project does not bleed into another. In this guide, one project holds one month of bills.
Model provider. PilotDeck does the file handling, but an AI model does the reading and judging. The model comes from a provider such as OpenAI, Anthropic or Google, or from a model you run on your own computer.
API key. A password-like code that lets PilotDeck use a provider's model and bills your account for it. Treat it like a bank password. Never paste it into a chat or a shared document.
Local address. After you install it, PilotDeck runs on your own computer and you open it in a browser at http://localhost:3001. Nobody else can reach that address.
What this checks, and what it does not
PilotDeck compares each bill with the price files you give it. That is the whole job. Be clear about the edges before you rely on it.
| It checks | It cannot check |
|---|---|
| Whether the unit price on the bill matches the price the company sent | Whether the price the company sent was fair, or still current |
| Whether the quantity fits the price (for example, a minimum order) | Whether the goods or service were actually delivered |
| Whether there is a charge that is not in the price the company sent | A price you agreed by phone, unless you wrote it down as a file |
| Whether the same bill shows up twice for the same month | Tax, currency, discount or contract terms that are not in your files |
| Whether a bill has no price from that company in the folder | Whether a bill is genuine and not a fake invoice |
The last row matters. A bill that matches a price file is not proof the bill is real. Keep your normal checks for new suppliers and changed bank details.
Before you start
You need four things.
| Need | What it means |
|---|---|
| A computer | macOS, Linux or Windows. The installer needs Node.js 22.13 or newer (below version 23) and checks for it when it runs. |
| An AI model | Either an API key from a provider you pay, or a model running on your own computer through Ollama. |
| Your files | Last month's bills, and the price email or price list each company sent you. |
| One decision-maker | The person who decides what gets paid. PilotDeck never pays anything. |
What it costs. The PilotDeck software is free. You still pay for:
- AI model usage: every run reads your files and uses tokens from your provider. The cost depends on how many bills you load and which model you pick. If you use a local model, you pay in computer time instead.
- Your time: install takes a few minutes, but setting up your price files the first time takes longer.
PilotDeck itself has no fee, so budget from your own model provider's pricing.
Data. When you use a cloud model, the text of your bills and price files goes to that provider under its terms. Running PilotDeck on your own computer controls where the workspace lives. It does not make a cloud model private. Remove bank details, card numbers and passwords from every file before you load it.
Install PilotDeck
Choose one route. The commands below come from PilotDeck's README.
Option A: macOS or Linux. Open Terminal and run:
curl -fsSL https://raw.githubusercontent.com/OpenBMB/PilotDeck/main/install.sh | bashThe installer checks for the supported Node.js 22 runtime, clones the repository, installs dependencies and builds the interface. On macOS, make sure Xcode Command Line Tools and a Python with distutils work before you start. On Linux, it can install missing system packages when sudo and a supported package manager are available.
The rest of this playbook is below.
Enter your email to read it. You also get one new playbook every week.
One email a week. Unsubscribe any time.
Option A2: Windows PowerShell. Run PowerShell as a normal user, then run:
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/OpenBMB/PilotDeck/main/install.ps1 | iex"This installs PilotDeck under %USERPROFILE%.pilotdeck and starts it. It does not open a browser by itself. Copy the printed address into your browser, or run Start-Process http://localhost:3001.
Other routes. The README also documents a source install for developers and a Docker Compose option (docker compose up -d --build). The PilotDeck site links desktop installers for Windows, macOS and Linux on its GitHub releases page. This guide uses the command-line installers because the README documents them step by step.
Security note. Both one-line installers download a script from GitHub and run it. Read the script in the repository first, or ask your technical person to. On a work computer, ask your IT owner before running it.
Checkpoint. After the install finishes, start PilotDeck and check it is running:
pilotdeck
pilotdeck statusPass: PilotDeck prints an address, usually http://localhost:3001, and it opens in your browser.
Stop: if the command is not found, open a new terminal window so the PATH update is picked up, or load your shell profile, then try again.
Connect a model. On first launch, PilotDeck opens an onboarding screen where you choose a provider and enter an API key. The README lists these supported protocols: OpenAI, Anthropic, Google Gemini, DeepSeek, Qwen, Kimi, MiniMax and other OpenAI-compatible endpoints. A local model through Ollama needs no API key.
Set a spending limit in your provider's dashboard before your first run, if the provider offers one. Use the same model for every run so that results are comparable.
Set up your folder
PilotDeck reads files from a folder you give it. Make one folder with two sub-folders. The names matter, because the prompt in section 7 refers to them.
Last_Month_Bills/
prices_sent/
bills/- Put each company's price in prices_sent. A price email: save it as a PDF, or paste its text into a .txt file that includes the sender and the date. A price list: save the PDF exactly as sent. A price agreed by phone: write a short text file with the date, who gave you the price, the price, any minimum order and when they bill.
- Put last month's bills in bills, one file per bill. Name each file with the bill number and company, for example BW-4417BoxwellPackaging_bill.pdf.
- Remove bank details from every file before you load it. Do not change anything else in a bill.
- Keep an untouched copy of the folder somewhere else. The prompt tells PilotDeck not to change any file, but a copy costs nothing.
- In PilotDeck, open a new project and add the LastMonthBills folder so that both prices_sent and bills show in the file list. Menu names may differ on your screen.
If PilotDeck cannot read a PDF, keep a plain-text copy of each file ready. Section 14 covers that case.
The prompt
Paste this into your PilotDeck project. Replace Tidewell Goods with your store name and change nothing else on your first run.
I own an online store called Tidewell Goods. The folder prices_sent has the price each company sent us, as emails and price lists. The folder bills has last month's bills.
Check every bill against the price that company sent us. Make an Excel file with one row per bill and these columns: Company, Bill number, Price sent, Price billed, Difference, Status, Reason, Your decision.
Price sent is what the bill should come to at the price the company sent us. Difference is Price billed minus Price sent.
Status is Fine only when the bill matches the price sent and nothing else is wrong. Status is Needs a look if the price is higher than the price sent, the quantity does not fit, there is a charge that is not in the price the company sent, the same bill shows up twice for the same month, or there is no price from that company in the folder.
In Reason, write one plain sentence on what you found. Leave Your decision empty. Do not change any file.Why it is written this way. It defines Price sent and Difference in words, so every row means the same thing. It lists exactly when a bill must be marked Needs a look, so the model does not decide that by feel. It leaves Your decision empty and tells the model not to touch your files, so the payment decision stays with you.
Checkpoint. When the run finishes, open the Excel file.
Pass: one row per bill, the eight columns above, every Status reading either Fine or Needs a look, and Your decision empty on every row.
Stop: any other Status wording, missing rows, a filled Your decision column, or changed files in your folder. Fix those before you trust the result.
Read the result
Open the Needs a look rows first. Each Reason names one of five things.
| Flag | What it means | What to do |
|---|---|---|
| Price | The unit price is higher than the price sent | Check the quoted price file. If it is right, ask the supplier to correct the bill |
| Quantity | The quantity does not fit the price, for example below a minimum order | Check the minimum in the price file |
| Extra charge | A line item has no match in the price the company sent | Ask the supplier what the charge is for and where it was agreed |
| Repeat | The same bill appears twice for the same month | Check whether it is a genuine second bill before paying |
| No price on file | The folder holds no price from that company | Find the price, add it as a file, and run the check again |
Do not trust the sheet without checking it. Open at least three rows, including one marked Fine, and compare every number with the files yourself: price, quantity, total. A fluent Reason that cannot be matched to a file is a failed run. Nothing may be invented.
A worked example: eight bills, four flags
This is a fictional folder: Tidewell Goods, six companies that sent prices, and one company that sent a bill with no price. Every figure below is invented to show what a correct result looks like. It is not a product test.
| Company | Bill | Price sent | Price billed | Result |
|---|---|---|---|---|
| Boxwell Packaging | BW-4417 | 1,000 boxes at $0.85 = $850 | 925 | Needs a look: a $75 rush fee that is not in the price list |
| Labelio Labels | LBL-2290 | 10 rolls at $18 = $180 (minimum 5 rolls) | 180 | Fine |
| Lumen Photo Studio | LPS-0612 | 40 photos at $25 = $1,000 (minimum 10) | 1000 | Fine |
| Shopfront Software | SF-77310 | Standard plan, $79 a month | 79 | Fine |
| Stockroom Storage | STK-1031 | Storage, $1,500 a month | 1500 | Fine |
| Stockroom Storage | STK-1038 | Storage, $1,500 a month | 1500 | Needs a look: repeats the first September bill. Stockroom sends one bill a month |
| Swiftline Couriers | SWL-2209 | 300 parcels at $4.50 = $1,350 | 1485 | Needs a look: $4.95 a parcel against $4.50 |
| Brightclick Ads | BCA-3305 | No price in the folder | 2400 | Needs a look: no price from this company on file |
Money at stake before you investigate: $135 on the courier, $75 on the rush fee and $1,500 if the second storage bill is a genuine repeat. That is $1,710, plus a $2,400 bill that cannot be checked until you find the price.
Notice the first storage bill is Fine and the second is flagged. A good result flags the repeat and not the original.
Run it every month
A price rise caught in month one costs one bill. Caught in month twelve, it costs a year of bills.
- Add new bills to the bills folder. Move last month's to an archive folder so each run covers one month.
- Add any new or changed price as a file in prices_sent, with the date. Never overwrite an old price file; save the new one beside it.
- Add a price file for any supplier that has no price on file.
- Run the prompt in section 7 in a fresh project.
- Read the Needs a look rows. In Your decision, write Pay, Hold or Ask supplier.
- Keep the sheet with the month's bills, so you can answer a question about any payment later.
Where a person stays in charge
In this workflow PilotDeck reads files and writes one sheet. That is all it does.
- It does not pay anything. Do not connect it to your bank, your accounting system or your card.
- It does not contact suppliers. You write to them.
- It does not decide. The Your decision column stays empty until you fill it.
- Pay a flagged bill only after you have looked at the price file and the bill yourself.
Give it more only after weeks of results where every flag you checked was correct and no real overcharge was missed. Even then, keep payment behind a person.
Today, no software needed
Do this before you install anything. Take last month's three biggest bills. For each one, find the price the company sent you and write down:
- Price: does the unit price on the bill match the price sent?
- Quantity: does the quantity fit, for example a minimum order?
- Extra charges: is every line item in the price the company sent?
- Repeats: does the same bill appear twice for the month?
If you cannot find the price a company sent you, you have found the first gap. Save that company's price email or price list as a file today, once. Every later check starts from it.
Starter checklist
Today, no setup
- Check your three biggest bills by hand using the four checks in section 12
- Find and save the price file for each supplier behind them
Setup
- Install PilotDeck and confirm pilotdeck status runs
- Connect one model and set a spending limit with your provider
- Build the LastMonthBills folder with prices_sent and bills
- Remove bank details from every file
Before the first real run
- Run the prompt on an old, already-paid month and compare the sheet with the files yourself
- Confirm Status says only Fine or Needs a look, and Your decision is empty
Each month
- Add new bills and any changed prices, with dates
- Open every Needs a look row against its source file
- Write your decision in the sheet before paying
After three months
- Check how many flags were real and whether any real overcharge was missed
- Decide: keep, adjust the prompt, or stop
Troubleshooting
| What you see | What to do |
|---|---|
| The pilotdeck command is not found | Open a new terminal window or load your shell profile so the PATH update is picked up. On Windows, run & "$HOME\\.pilotdeck\\bin\\pilotdeck.cmd" |
| GitHub returns "429: Too Many Requests" while downloading the installer | Wait a few minutes and run the command again, or download install.ps1 from the repository and run it locally |
| Windows install fails on native dependencies | Install Visual Studio Build Tools with the C++ workload and Python, then run the installer again |
| macOS install fails | Check that Xcode Command Line Tools and a Python with distutils work, then run the installer again |
| PilotDeck cannot read the PDFs | Save a plain-text copy of each price file and bill, put them in the same two folders, and run the prompt again. Note which version you used for that run |
| No Excel file appears | Ask PilotDeck for a CSV file with the same columns and open it in Excel. This is a workaround, not a documented feature |
| It flags every bill | Check that the price files are readable and name the same company as each bill. A price file it cannot read counts as no price on file |
| It flags nothing | Check the files loaded. Test with a bill you know is wrong. A clean sheet from an empty folder proves nothing |
| It invents a price or quantity | Treat the run as failed. Compare against the files, tighten the folder (one price per company) and run again |
| Status uses other wording | Paste the prompt again exactly as written and run it in a new project |
Honest limits
- PilotDeck is young. It was open-sourced in May 2026. Expect rough edges and changes between releases.
- A cloud model sees your files. Keep bank details out, read your provider's data terms, or use a local model.
- The result depends on the model. A weaker model reads files less reliably. Use the same model every month and check the sheet each time.
- It checks arithmetic against files, not the truth. If a price was agreed by phone and never written down, the bill will be flagged even though it is right. If the price file is wrong, a wrong bill will pass.
- It does not cover tax, currency conversion, volume discounts or contract terms unless they are written in your files.
- The AGPL-3.0 licence. Running PilotDeck for your own bills adds little. It matters if you change the code and offer it to other people as a service, because the licence then requires you to share your changes. This is not legal advice. Ask a lawyer if you are unsure.
- The overpayment figures describe large companies. They are a reason to check, not a prediction for your store.
- The AI can still be wrong. You are responsible for every payment decision.
How this guide was made. This guide is built from PilotDeck's README and project site, and from the apexanalytix 2026 Global Overpayment Report and its press release. Sources were checked on October 22, 2026. Every company, bill and amount in the worked example is fictional. Commands, settings and screens may change, so follow the linked documentation where it differs.
Links
- PilotDeck official GitHub repository
- PilotDeck project site
- PilotDeck installation and quick start (README)
- apexanalytix 2026 Global Overpayment Report
- apexanalytix press release on the report (Business Wire)
What this changes
A bill is only right if it matches the price the company sent. Most of the time nobody checks, because the check is slow and the gap on any one bill is small. Save each price once, run the same prompt every month, and the check stops being a job.
Start with last month's three biggest bills. The tool matters less than the habit of holding every bill against the price you were sent before you pay it.



