Skip to content

Importing invoices

If you already sent invoices from another tool (FreshBooks, Zoho, QuickBooks, Word or a spreadsheet), you can import the ones that are still open (unpaid, partly paid or overdue) so Plirin can chase them. An imported invoice keeps its original number, issue date and due date, gets a payment page, and works like any other invoice: reminders, payment recording, partial payments and the Bills inbox.

Importing is silent: your customers are not emailed when you import. You see a result screen and a short summary.

Invoice import is switched on by Plirin for the platform. If you do not see Import on the Invoices page, it is not available yet. You also need to have verified your email address and have the invoice management permission.

  • CSV: one row per invoice line, any number of invoices in one file. Download the template, plirin-invoice-import-template.csv, from the import screen.
  • PDF (paid plans): up to 10 PDFs at once, one invoice per PDF, each up to 10 MB and 10 pages. Each is read by AI and uses one of your monthly AI drafts, and counts as one upload toward the hourly upload limit (30 uploads or previews an hour, shared with CSV). Other limits are those of drafting from a document. You review every invoice before it is imported, and nothing is created without you.

Header matching ignores letter case and surrounding spaces. Columns the importer does not know are ignored, with a note. A missing required column stops the whole file before any row is checked. Empty rows are ignored.

ColumnRequiredNotes
invoice_numberyesRows with the same number make one invoice.
issue_date, due_dateyesYYYY-MM-DD.
customer_emailyes
customer_namenoUsed only when the customer is new to Plirin.
currencyyesAn ISO code, such as USD or EUR, for a currency enabled for your account.
line_description, quantity, unit_priceyesOne line per row.
line_discountnoAn amount.
invoice_discountnoAn amount.
tax_amountno
amounts_include_taxnoyes or no (default no).
totalyes
amount_paid, paid_onnoA payment your customer already made. Recording it needs the permission to record payments (invoice.settle); without it the invoice is refused.
terms, notesnoShown to your customer.

The columns that describe the whole invoice (number, dates, customer, currency, discount, tax, total, payment, terms and notes) must be the same on every row of that invoice, or the invoice is refused with the differing column named. Rows of one invoice do not have to be next to each other, and lines keep the order of the file.

Write numbers plainly, like 1200.50: no thousands separators, currency symbols or decimal commas. Save the file as CSV UTF-8.

Each file can hold up to 500 invoices and 2,000 lines, and be up to 5 MB. An upload is kept for one hour; after that, upload the file again.

Every problem with an invoice is listed at once, and nothing is imported until you confirm.

  • The total must match the lines exactly: the lines, less any invoice discount, plus tax. When amounts_include_tax is yes, the tax is part of the lines and the total equals the lines less the discount; the tax must be less than the total. Such an invoice shows Includes tax under its total on the payment page, the PDF, your dashboard and its reminders, and no tax is added on top.
  • Only open invoices can be imported: anything already paid in full is refused.
  • An invoice number may appear once per file and must not already belong to one of your invoices (ignoring letter case and voided invoices). An invoice you already imported is shown as already in Plirin, skipped, so importing the same file twice is safe.
  • The issue date cannot be in the future, the due date cannot be before the issue date, and a payment needs the date it was made.
  • An invoice can have up to 100 lines.

The preview shows how many invoices are ready, how much they add up to, which rows were refused and why, how many first reminders are going out and roughly over how many days, and whether you are importing into test or live data. After the import you can download the refused rows, with the reasons, to fix and import again.

FreePaid plans
CSV importUp to 50 imported invoices in total, and 50 more in test modeNo cap beyond the rate limits
Automatic reminders and chasingNot while you are on Free: send reminders by hand. Overdue imports are chased automatically once you upgradeYes
PDF importNoYes, one AI draft per PDF

The Free allowance is a total, not a monthly one, and counts every imported invoice that is not voided. Voiding an import gives its allowance back. If an import has more valid invoices than your plan still allows, the whole import is refused, and the message says how many more you can import.

Invoices that are not yet due follow your normal reminder schedule. Invoices that are already overdue get their own chase, which you choose when you import. Once an imported invoice is overdue you can also start or change its chase from the invoice (see below); before that, it follows the normal schedule and offers no chase controls.

  • the first reminder now (within a few minutes), on a date (sent at 09:00 your time), or don’t remind;
  • then every 7 days by default (you can choose 1 to 90 days), and it stops after 6 reminders.

“Don’t remind” means the invoice has no next reminder; you can start a chase for it later. Automatic reminders are on paid plans. On the Free plan the import screen offers no choice: it tells you that overdue invoices will be chased automatically once you upgrade, every 7 days, up to 6 reminders. Until then you send reminders from each invoice yourself.

To protect your customers’ inboxes, Plirin sends at most one import reminder to the same customer a day (oldest debt first) and at most 100 import reminders a day for your account (test and live are counted separately); the rest move to the next day. So a large import does not send all its first reminders at once, and the preview gives only an approximate time (“about 3 days”) for the first round to finish. The reminder names your original invoice number and issue date, the amount still owed after any partial payment, and your original terms.

In test mode, reminders go to you, as a preview of what your customer would receive.

From an overdue imported invoice you can Stop reminders, Change next reminder or Restart chase (Start chase if it never had one). These controls appear only once the invoice is overdue on your calendar, because a reminder sent before the due date would tell your customer the invoice is overdue; until then the invoice follows your normal reminder schedule. Sending a reminder by hand, from the dashboard or through the API, counts toward the 6 and pushes the next one back. The chase stops when the invoice is paid or voided, and ends after the sixth reminder (Chase ended), which you can undo with Restart chase.

Chases pause (nothing is lost) when Plirin has switched invoice import off, or when your plan does not include automatic reminders. Overdue invoices you import on the Free plan wait in that paused state, and the invoice panel shows them as paused; so does a move to the Free plan later (your reminder days in Settings are kept, shown as paused, until you upgrade). When they resume, whether Plirin switches import back on or you upgrade, an overdue chase is sent on the next run and the reminders after it are spaced from that day, within the same limits (one reminder per customer a day, 100 a day), so your customers are not sent a backlog all at once.

While invoice import is switched off, Stop reminders, Change next reminder and Void this import are unavailable. The chases keep their place and resume when it is switched back on.

The payment page shows the original invoice number, the original issue date and your terms. It shows today’s bank details and payment options, not the ones on the original invoice: check them before you import. For a PDF import, the original PDF is shown on the payment page by default; you can switch that off from the invoice’s attachments.

Promotion codes cannot be used on an imported invoice: its discount is the one you stated, so the payment page offers no promo code field for it.

Imported invoices never get Plirin late fees. Fees already charged on the original invoice can be imported as ordinary lines. If you import an invoice to a customer who is also a Plirin member, it appears in their Bills inbox as new.

Void this import, on any invoice from the import, voids every invoice from it that has no payment, no credit note and no reminder since the import, and lists the ones it left alone and why. Invoices are voided, never deleted. You can then import the corrected file.

Imported invoices count toward what you are owed now (outstanding, overdue and aging), but not toward what you invoiced in a period, nor the VAT report: they were invoiced in your previous tool. The invoice list tags them Imported and has an Imported filter and a Chase ended filter, and the CSV export has an imported column. Money collected later through Plirin counts like any other payment.

Import operations are dashboard-only and are denied to API keys. Imported invoices carry extra GraphQL fields, but the REST API and the SDKs do not mark them, so use the GraphQL invoices query to tell them apart. Their webhooks have a source field: see Queries, Mutations and the webhook payloads.