Pricing
$50.00 / 1,000 results
Bulk Invoice generator
Under maintenancehttps://apify.com/ideas/invoice-generator-dc557656
Pricing
$50.00 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
3
Total users
0
Monthly active users
4 months 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:
ACMELTDGlobex 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 =newApifyClient({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:
-
undefined
-
undefined
-
$undefined
-
- 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.
