Swiss QR-bill Generator (QR-facture / QR-Rechnung)
Pricing
from $20.00 / 1,000 qr bills
Swiss QR-bill Generator (QR-facture / QR-Rechnung)
Generate compliant Swiss QR-bills as PDF, SVG or PNG from JSON or a CSV file: payment part and receipt with QR code, IBAN or QR-IBAN, QRR or SCOR reference, in French, German, Italian or English. One bill or thousands per run.
Pricing
from $20.00 / 1,000 qr bills
Rating
0.0
(0)
Developer
Najim Abdelmoula
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
What does Swiss QR-bill Generator do?
Swiss QR-bill Generator turns a JSON object or a CSV file into ready-to-print Swiss QR-bills (QR-facture, QR-Rechnung, QR-fattura): the payment part and receipt with the Swiss QR code, as PDF, SVG or PNG, in French, German, Italian or English. One bill or thousands per run, with the creditor set once and the debtors, amounts and references varying per bill. It is a Swiss QR-bill API for invoicing tools, automations and AI agents, following the Swiss Payment Standards implementation guidelines used by every Swiss bank since 2022.
It does not send invoices, does not talk to any bank, and keeps nothing after the run.
Why use Swiss QR-bill Generator?
- 🧾 Compliant output: QR-IBAN with 27-digit QR reference (QRR), regular IBAN with RF creditor reference (SCOR) or no reference, structured or combined addresses, CHF and EUR, amount left blank when the payer fills it in, Swico billing information.
- 📄 Print-ready: full A4 page with the bill at the bottom, or the 210 × 105 mm payment part alone to append to your own invoice PDF.
- 📦 Bulk: pass an array or a CSV export from your accounting tool and get one file per bill plus a table linking each bill to its file.
- 🤖 Automation-friendly: call it from n8n, Make, Zapier or the Apify API, or let an AI agent generate a bill through the Apify MCP server. Structured input, structured output, no PDF service to host.
- ✅ Validation you can act on: a bill with a wrong IBAN, a reference that does not match the account type, or a text over 140 characters is reported as an error with the reason, and is not billed.
Typical users: small businesses and freelancers who invoice in Switzerland, fiduciaries, SaaS products adding Swiss payments, agencies automating invoicing for clients, and developers who need a QR-bill without integrating a library.
What does it produce?
One row per bill in the dataset, and one file per bill in the run's key-value store.
| Field | Type | Description |
|---|---|---|
id | string | Your bill id, or bill-0001 when omitted |
status | string | ok or error |
fileUrl | string | Link to the generated PDF / SVG / PNG |
filename | string | <id>.pdf, <id>.svg or <id>.png |
amount / currency | string | Amount as printed (empty when left to the payer) and currency |
referenceType | string | QRR, SCOR or empty |
language | string | Language of the printed labels |
qrPayload | string | The exact Swiss Payments Code encoded in the QR code, for checks and archiving |
errors | array | Validation messages for rejected bills |
How to generate a Swiss QR-bill
- Open the Actor and paste your bills as JSON in Bills, or put the URL of a CSV file in CSV file URL.
- Set the default account and default creditor once if they are the same for every bill.
- Choose the output format (PDF, SVG, PNG), the language, and whether you want a full A4 page or the payment part only.
- Click Start. Each bill appears in the Output tab with a link to its file.
- Download the files from the Storage tab, or read
fileUrlfrom the dataset in your automation.
Which reference should I use?
- QR-IBAN (the IBAN your bank gave you for QR-bills, IID 30000 to 31999): you must provide a 27-digit QR reference (
reference), for example210000000003139471430009017. The Actor checks the check digit. - Regular IBAN: either no reference, or an ISO 11649 creditor reference starting with
RF, for exampleRF18539007547034. - Mixing them is rejected with an explicit message, as banks would reject the payment.
What goes in additionalInformation and billingInformation?
additionalInformation is the free message printed on the bill (up to 140 characters). billingInformation is the optional structured Swico string for accounting software, starting with //S1/. Together they may not exceed 140 characters.
How much does it cost?
The Actor is paid per generated bill (see the pricing box on this page); rejected bills are free. Generating 100 invoices costs a few cents. The Apify free plan is enough for a small business's monthly invoicing.
Input
See the Input tab for all options. Minimal example, one bill with a regular IBAN and no reference:
{"account": "CH5800791123000889012","creditor": {"name": "ACME Sàrl", "street": "Rue du Lac", "houseNumber": "12", "postalCode": "1000", "city": "Lausanne", "country": "CH"},"bills": [{"id": "INV-2026-001", "debtor": {"name": "Client SA", "street": "Bahnhofstrasse", "houseNumber": "1", "postalCode": "8001", "city": "Zürich"}, "amount": 1250.00, "additionalInformation": "Invoice INV-2026-001"}],"format": "pdf","language": "fr"}
CSV alternative: a file with the columns id, account, amount, currency, reference, additional_information, language, creditor_name, creditor_street, creditor_house_number, creditor_postal_code, creditor_city, creditor_country, debtor_name, debtor_street, debtor_house_number, debtor_postal_code, debtor_city, debtor_country, comma or semicolon separated. Columns left empty fall back to the defaults.
Output
You can download the dataset in JSON, CSV, Excel or HTML formats. Two items:
[{"id": "2026-0042","status": "ok","filename": "2026-0042.pdf","fileUrl": "https://api.apify.com/v2/key-value-stores/.../records/2026-0042.pdf","format": "pdf","amount": "1949.75","currency": "CHF","referenceType": "QRR","language": "fr","qrPayload": "SPC\n0200\n1\nCH4431999123000889012\nS\nRobert Schneider AG\n...","errors": []},{"id": "2026-0044","status": "error","errors": ["The reference number is invalid"]}]
Using the Actor from code and AI agents
Call it through the Apify API in any language, or expose it to Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server. Example with the Python client:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("<ACTOR_ID>").call(run_input={ # Actor ID or "username/name" from the API tab"account": "CH5800791123000889012","creditor": {"name": "ACME Sàrl", "postalCode": "1000", "city": "Lausanne"},"bills": [{"id": "INV-1", "amount": 99.9, "debtor": {"name": "Client SA", "postalCode": "8001", "city": "Zürich"}}],})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["id"], item["status"], item.get("fileUrl"), item["errors"])
Privacy and data handling
Bill data is processed in memory inside your own Actor run. The generated files and the result table are written only to the run's storage, which belongs to your Apify account and follows your data retention settings. The Actor author never receives, logs or stores your bills.
Frequently asked questions
Is the output accepted by Swiss banks and scanning apps?
The Actor implements the Swiss Payment Standards QR-bill specification (Swiss QR Code version 0200) through a widely used open-source library, and validates IBANs, QR references and creditor references. As with any generator, print a test bill and scan it with your e-banking app before sending a batch.
Can I put the QR-bill on my existing invoice PDF?
Generate the payment part only (fullPage: false) as PDF or PNG and place it at the bottom of your last page with your PDF tool. A companion Actor that reads QR-bills back into data is available from the same author.
Which characters are allowed?
The Swiss Payments Code uses a restricted Latin character set. Names and messages with accents from French, German and Italian are fine; emoji and non-Latin scripts are not.
Something looks wrong
Open an issue in the Issues tab with a minimal bill (without real customer data).
Development
Python 3.12, Apify SDK, qrbill for the SVG and CairoSVG for PDF and PNG. pytest tests covers references, addresses, formats and CSV parsing; apify run runs the Actor locally.