Bulk Invoice generator
Pricing
$50.00 / 1,000 results
Bulk Invoice generator
https://apify.com/ideas/invoice-generator-dc557656
Pricing
$50.00 / 1,000 results
Rating
0.0
(0)
Developer

Maciej
Actor stats
0
Bookmarked
3
Total users
2
Monthly active users
19 days ago
Last modified
Categories
Share
Invoice Generator Actor
Automate creation of polished PDF invoices (single or bulk) with pdfkit on Apify.
Supports Excel column paste or a full JSON array of invoices, auto-numbering, defaults, logo, and ZIP output.
Features
- Subtotal, discount, tax, grand total (auto)
- Two input styles: Excel-paste textareas or
invoicesJson(array) - Auto numbering (e.g.,
00000,00001, …) - Bulk ZIP + individual PDFs in Key-Value Store
- Logo + seller block + one-page clamp
Quick start
- Install deps in
package.json:
{"dependencies": {"apify": "^3.0.0","jszip": "^3.10.1","pdfkit": "^0.14.0"}}
- Run the actor from Apify UI or API using one of the inputs below.
Input options
A) Excel-paste mode (no JSON needed)
Paste one value per line in the UI:
- Client Names, Client Addresses, (optional) Client Emails
- (optional) Invoice Numbers, (optional) Invoice Dates (YYYY-MM-DD)
- Line Description, (optional) Quantity, Amount
Also set top-level defaults (currency, tax, logo, seller, auto numbering).
Example (what you paste):
Client Names:
ACME LTDGlobex LLCInitech
Client Addresses:
123 Main St, SpringfieldHauptstraße 1, Berlinul. Testowa 2, Warszawa
Line Item — Description:
Monthly subscriptionDesign sprint (1 day)Consulting package
Line Item — Amount:
199.996001200
Leave Invoice Numbers empty to let auto numbering handle it.
B) JSON array (full control)
Set invoicesJson (textarea) to a JSON array:
[{"invoiceNumber": "","invoiceDate": "2025-11-03","currency": "USD","locale": "en-US","onePage": true,"seller": { "name": "Your Company", "address": "Street 1", "email": "billing@company.com", "vat": "PL1234567890" },"client": { "name": "Client A", "address": "Road 10", "email": "a@client.com" },"items": [{ "item": "SUB-MONTH", "description": "Monthly subscription", "quantity": 1, "amount": 199.99 }],"taxRate": 23,"discount": 0,"paymentTerms": "Net 14","footerNote": "Bank: XYZ • IBAN PL00 0000 0000 0000 0000 0000"}]
Empty or missing invoiceNumber will be auto-assigned if auto numbering is on.
Auto numbering
Control via top-level fields:
useAutoInvoiceNumbering(boolean, defaulttrue)invoiceNumberStart(number, e.g.,0)invoiceNumberWidth(number, e.g.,5→00000,00001, …)
Rules: Explicit numbers (from JSON or the “Invoice Numbers” textarea) are kept. Missing ones are generated.
Global invoice date
If the Invoice Dates textarea is empty, set a single date for all with:
globalInvoiceDate(YYYY-MM-DD)
Missing per-row dates fall back to globalInvoiceDate, then today.
Output
- Single invoice →
INVOICE-<number>.pdf - Multiple invoices → individual PDFs and a ZIP (e.g.,
INVOICES.zip) - Files appear in the run’s Key-Value Store
API usage examples
cURL
curl -X POST "https://api.apify.com/v2/acts/<USERNAME>~invoice-generator/runs?token=<APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"clientNamesLines": "ACME LTD\nGlobex LLC","clientAddressesLines": "123 Main St\nHauptstraße 1","lineDescLines": "Monthly subscription\nDesign sprint","lineAmountLines": "199.99\n600","defaultCurrency": "USD","defaultLocale": "en-US","defaultTaxRate": 23,"useAutoInvoiceNumbering": true,"invoiceNumberStart": 0,"invoiceNumberWidth": 5,"globalInvoiceDate": "2025-11-03","sellerName": "Your Company Sp. z o.o.","sellerAddress": "ul. Przykładowa 1, 00-000 Warszawa","sellerEmail": "billing@company.com","sellerVat": "PL1234567890","zipName": "INVOICES.zip"}'
Node.js (Apify Client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('<USERNAME>/invoice-generator').call({invoicesJson: JSON.stringify([{invoiceNumber: "",invoiceDate: "2025-11-03",currency: "EUR",locale: "de-DE",seller: { name: "Your Company", address: "Street 1", email: "billing@company.com", vat: "PL1234567890" },client: { name: "Client B GmbH", address: "Hauptstraße 1, Berlin", email: "ap@b.com" },items: [{ item: "Consulting", description: "8h package", quantity: 8, amount: 1200 }],taxRate: 19,paymentTerms: "Net 14"}]),defaultCurrency: "EUR",defaultLocale: "de-DE",useAutoInvoiceNumbering: true,invoiceNumberStart: 42,invoiceNumberWidth: 5});console.log('Run:', run.data.id);
Common formatting pitfalls (and fixes)
- Always fence code with triple backticks and a language hint:
-
-
-
$
-
- Valid JSON only in
invoicesJson(no comments, no trailing commas). - When pasting columns: one value per line; blank lines are ignored.
- If your README shows curly braces weirdly inside Markdown lists, put them in a fenced code block.
Troubleshooting
-
“invoicesJson must be a non-empty JSON array”
Your textarea isn’t valid JSON or it’s empty. Paste an array[...]. -
Got multiple pages unexpectedly
EnsuredefaultOnePage: true(or setonePage: trueper invoice). Long item lists get truncated with “... and N more item(s)”. -
Logo not showing
defaultLogoPathmust point to a file the actor can read (e.g., uploaded via schema file field). Paths are inside the actor’s sandbox.