- Description
- Actions
- Workflows
Stripe Guide
View implementation guide ›
| Developer | Invopop |
| Category | Integrations |
- An Invopop app within your Stripe dashboard (installed from the Stripe App Marketplace)
- An app in your Invopop console
- Automatic import: Finalized Stripe invoices and credit notes are automatically imported into Invopop and saved to the
Salesfolder. - Workflow automation: Process imported invoices through your configured workflows to generate compliant invoices, PDFs, and submit to tax authorities.
- Real-time processing: Track invoice status directly in your Stripe dashboard with the Invopop panel in the right sidebar.
- Historical import: Import historical invoices issued before connecting Invopop by clicking Process this invoice in the Stripe dashboard.
- Error handling: Retry failed imports directly from Stripe or troubleshoot in the Invopop console.
- Multi-format support: Convert Stripe invoices to any e-invoice format supported by Invopop, including country-specific formats like VERI*FACTU (Spain), XRechnung (Germany), and more.
The following workflow actions will be available once you install and enable this app:


Import invoice from Stripe
Import invoice and credit note data from Stripe into Invopop.
Process invoice payment with Stripe
Processes payment for an invoice through Stripe
Assign virtual IBAN
Adds to the Payment Instructions the Virtual IBAN assigned to the customer
The following workflows are available to make your integration easier. Use them as templates to build upon.
Stripe - Basic PDF invoice workflow
Stripe - Basic PDF invoice workflow
This workflow syncs with Stripe to generate a PDF invoice on finalized sales.Add to my workspace →
Example Stripe PDF workflow
{
"name": "Stripe PDF invoice",
"description": "Sync from Stripe and generate a PDF",
"schema": "bill/invoice",
"steps": [
{
"id": "7dd8e370-139b-11f0-b939-af2e8ae705ac",
"name": "Import invoice from Stripe",
"provider": "stripe.import"
},
{
"id": "95a82a10-139b-11f0-b939-af2e8ae705ac",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `processing`{.state .processing}",
"config": {
"state": "processing"
}
},
{
"id": "84cf92a0-139b-11f0-b939-af2e8ae705ac",
"name": "Sign envelope",
"provider": "silo.close"
},
{
"id": "86a5b230-139b-11f0-b939-af2e8ae705ac",
"name": "Generate PDF",
"provider": "pdf",
"summary": "Spanish · A4",
"config": {
"date_format": "%Y-%m-%d",
"layout": "A4",
"locale": "es",
"logo_height": 40
}
},
{
"id": "8b321820-139b-11f0-b939-af2e8ae705ac",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `sent`{.state .sent}",
"config": {
"state": "sent"
}
}
],
"rescue": [
{
"id": "90f4b420-139b-11f0-b939-af2e8ae705ac",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `error`{.state .error}",
"config": {
"state": "error"
}
}
]
}
Stripe - VERI*FACTU invoice workflow
Stripe - VERI*FACTU invoice workflow
This workflow syncs with Stripe to issue a VERI*FACTU invoice on finalized sales in Spain.Add to my workspace →
Example Stripe to VERI*FACTU workflow
{
"name": "Stripe VERI*FACTU invoice",
"description": "Sync from Stripe and issue a VERI*FACTU invoice",
"schema": "bill/invoice",
"steps": [
{
"id": "7dd8e370-139b-11f0-b939-af2e8ae705ac",
"name": "Import invoice from Stripe",
"provider": "stripe.import"
},
{
"id": "95a82a10-139b-11f0-b939-af2e8ae705ac",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `processing`{.state .processing}",
"config": {
"state": "processing"
}
},
{
"id": "794f78d0-139d-11f0-9ab7-c391120166e0",
"name": "Modify silo entry",
"provider": "silo.modify",
"summary": "Add `es-verifactu-v1` addon and \"Factura\" note",
"config": {
"addons": [
"es-verifactu-v1"
],
"allow_invalid_json": false,
"data": {
"doc": {
"notes": [
{
"key": "general",
"text": "Factura"
}
]
}
},
"expr": "",
"merge_type": "application/merge-patch+json",
"sign": false,
"tags": []
}
},
{
"id": "84cf92a0-139b-11f0-b939-af2e8ae705ac",
"name": "Sign envelope",
"provider": "silo.close"
},
{
"id": "fc307c60-139b-11f0-b939-af2e8ae705ac",
"name": "Generate VERI*FACTU",
"provider": "verifactu.generate"
},
{
"id": "fe479c90-139b-11f0-b939-af2e8ae705ac",
"name": "Send invoice to VERI*FACTU",
"provider": "verifactu.send"
},
{
"id": "86a5b230-139b-11f0-b939-af2e8ae705ac",
"name": "Generate PDF",
"provider": "pdf",
"summary": "Spanish · A4",
"config": {
"date_format": "%Y-%m-%d",
"layout": "A4",
"locale": "es",
"logo_height": 40
}
},
{
"id": "8b321820-139b-11f0-b939-af2e8ae705ac",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `sent`{.state .sent}",
"config": {
"state": "sent"
}
}
],
"rescue": [
{
"id": "90f4b420-139b-11f0-b939-af2e8ae705ac",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `error`{.state .error}",
"config": {
"state": "error"
}
}
]
}
Stripe - Peppol invoice workflow
Stripe - Peppol invoice workflow
This workflow syncs with Stripe and sends the invoice over the Peppol network, looking the customer’s participant ID up at run time. Register your supplier on Peppol first — see the Peppol guide.Add to my workspace →
Example Stripe to Peppol workflow
{
"name": "Stripe Peppol invoice",
"description": "Sync from Stripe and send via Peppol",
"schema": "bill/invoice",
"steps": [
{
"id": "ab0b8c40-d4e7-11f0-9e5d-e1650cc9a3d1",
"name": "Import invoice from Stripe",
"provider": "stripe.import"
},
{
"id": "33e23480-10ab-11f0-a09e-7b63571a4ae2",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `processing`{.state .processing}",
"config": {
"state": "processing"
}
},
{
"id": "dcb86010-d4e7-11f0-9bd8-c3ca8212c614",
"name": "Add supplier Peppol ID",
"provider": "silo.modify",
"summary": "Add supplier Peppol inbox",
"config": {
"merge_type": "application/jq",
"scope": "doc",
"jq": ".supplier.inboxes =\n(\n (.supplier.inboxes // []) as $inboxes\n |\n if ($inboxes | any(.key == \"peppol\")) then\n $inboxes\n else\n $inboxes + [\n {\n key: \"peppol\",\n \"scheme\": \"\",\n \"code\": \"\"\n }\n ]\n end\n)\n"
}
},
{
"id": "00e00280-d66f-11f0-8fc4-ff91328c62f5",
"name": "Add purchase order number",
"provider": "silo.modify",
"summary": "Add purchase order number",
"config": {
"jq": "if (.ordering.code == null) and ((.ordering.purchases // [])[0].code == null) then \n.ordering.purchases[0].code = \"NA\"\nend",
"merge_type": "application/jq",
"scope": "doc"
}
},
{
"id": "b54b7000-d779-11f0-8eaf-79de543fb8d0",
"name": "Move negative line items to discounts",
"provider": "silo.modify",
"summary": "Move negative line items to discounts",
"config": {
"jq": ". as $doc\n|\n# Select lines that are negative\n($doc.lines | map(select(.item.price|tonumber < 0))) as $neg\n|\n# Select lines that are positive\n($doc.lines | map(select(.item.price|tonumber >= 0))) as $pos\n|\n# Convert negative lines to discount entries\n($neg | map({\n reason: .item.name,\n amount: ((.total|tonumber) * -1 | tostring),\n taxes: .taxes\n})) as $discounts\n|\n$doc\n| .lines = $pos\n| .discounts = $discounts\n",
"merge_type": "application/jq",
"scope": "doc"
}
},
{
"id": "896013d0-d515-11f0-a832-01ce614dcba6",
"name": "Include payment means when empty",
"provider": "silo.modify",
"summary": "Include payment means when empty",
"config": {
"addons": [
"eu-en16931-v2017"
],
"jq": "if (.payment.instructions // null) == null then\n .\nelse\n (\n\n . as $doc\n | .payment |= (\n . // {}\n |\n .instructions.key |= (split(\"+\")[0])\n |\n .terms //= {\n due_dates: [\n {\n date: (\n $doc.issue_date\n | strptime(\"%Y-%m-%d\")\n | .[1] += 1 # add 1 month\n | mktime\n | strftime(\"%Y-%m-%d\")\n ),\n percent: \"100%\"\n }\n ]\n }\n )\n\n # ↑↑↑ end of modifications ↑↑↑\n )\nend\n",
"merge_type": "application/jq",
"scope": "doc"
}
},
{
"id": "6c96aac0-d4e8-11f0-9bd8-c3ca8212c614",
"name": "Lookup Peppol participant",
"provider": "peppol.lookup",
"summary": "Lookup customer",
"config": {
"party": "customer"
}
},
{
"id": "fb06b190-10aa-11f0-a09e-7b63571a4ae2",
"name": "Sign envelope",
"provider": "silo.close"
},
{
"id": "fc5aa8d0-10aa-11f0-a09e-7b63571a4ae2",
"name": "Generate UBL document",
"provider": "ubl.generate",
"summary": "Peppol BIS Billing UBL Invoice/CreditNote V3",
"config": {
"doc_type": "bis-invoice-v3",
"private": false
}
},
{
"id": "075442a0-10ab-11f0-a09e-7b63571a4ae2",
"name": "Send Peppol document",
"provider": "peppol.send"
},
{
"id": "3037a310-10ab-11f0-a09e-7b63571a4ae2",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `sent`{.state .sent}",
"config": {
"state": "sent"
}
}
],
"rescue": [
{
"id": "97ced0a0-d4e8-11f0-985d-3b44fe520da3",
"name": "Send email",
"provider": "email.send",
"summary": "",
"config": {
"add_invoice_customer": false,
"add_invoice_supplier": false,
"add_party": false,
"attach": "",
"body": "VGhpcyBpbnZvaWNlICh7ey5mdWxsX2NvZGV9fSkgZmFpbGVkIHdpdGggZXJyb3I6IHt7LmZhdWx0c319",
"connection_id": "default",
"subject": "The invoice failed - check invopop",
"zip_attachments": false
}
},
{
"id": "39513240-10ab-11f0-a09e-7b63571a4ae2",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `error`{.state .error}",
"config": {
"state": "error"
}
}
]
}
Stripe - France send invoice workflow
Stripe - France send invoice workflow
This workflow syncs with Stripe, then forwards the invoice to the PPF when the customer is registered in the French directory, or records it for e-reporting when they are not. There is no one-click template for it yet — copy the JSON into a new Empty Invoice workflow.Read the country notes →
Example Stripe France workflow
{
"name": "Stripe France send invoice",
"description": "Sync from Stripe and forward to PPF or record for reporting",
"schema": "bill/invoice",
"steps": [
{
"id": "ab0b8c40-d4e7-11f0-9e5d-e1650cc9a3d1",
"name": "Import invoice from Stripe",
"provider": "stripe.import"
},
{
"id": "33e23480-10ab-11f0-a09e-7b63571a4ae2",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `processing`{.state .processing}",
"config": {
"state": "processing"
}
},
{
"id": "eea78ac0-26f0-11f1-9156-e518ebabd527",
"name": "Add billing mode",
"provider": "silo.modify",
"notes": "S2 (already-paid) ONLY when fully paid (totals.advance == total_with_tax); else S1. S2 also adds payment.terms due_dates (BR-FR-CO-09). Reads .totals.advance (NOT the old .advances bug).",
"summary": "Modifications configured",
"config": {
"jq": ".tax.ext = (.tax.ext // {})\n| .tax.point = \"issue\"\n| if ((.totals.advance // null) != null and (.totals.advance == .totals.total_with_tax)) then\n .tax.ext[\"fr-ctc-billing-mode\"] = \"S2\"\n | .payment = (.payment // {})\n | .payment.terms = (.payment.terms // {\"due_dates\":[{\"date\":.issue_date,\"percent\":\"100%\"}]})\n else\n .tax.ext[\"fr-ctc-billing-mode\"] = \"S1\"\n end",
"merge_type": "application/jq",
"scope": "doc"
}
},
{
"id": "4f427d80-a44d-11f0-b23b-fd08a0f26c87",
"name": "Add VATEX",
"provider": "silo.modify",
"summary": "Modifications configured",
"config": {
"jq": ".lines |= map(\n .taxes |= map(\n (.ext[\"untdid-tax-category\"]? as $cat\n | if $cat then\n {\n key: {\n \"AE\": \"reverse-charge\",\n \"E\": \"export\",\n \"G\": \"export\",\n \"O\": \"outside-scope\",\n \"K\": \"intra-community\"\n }[$cat],\n vatex: {\n \"AE\": \"VATEX-EU-AE\",\n \"G\": \"VATEX-EU-G\",\n \"O\": \"VATEX-EU-O\",\n \"K\": \"VATEX-EU-IC\"\n }[$cat]\n } as $m\n\n | if $m.key then .key = $m.key else . end\n | if $m.vatex then\n .ext = ((.ext // {}) + {\"cef-vatex\": $m.vatex})\n else\n .\n end\n else\n .\n end\n )\n )\n)",
"merge_type": "application/jq",
"scope": "doc",
"sign": false
}
},
{
"id": "7dad54c0-154a-11f0-8028-c1ed648b57b5",
"name": "Add bank details",
"provider": "silo.modify",
"notes": "Normalizes the payment key to SEPA credit transfer format",
"summary": "Modifications configured",
"config": {
"allow_invalid_json": false,
"data": {
"doc": {
"payment": {
"instructions": {
"credit_transfer": [
{
"bic": "",
"iban": ""
}
],
"key": "credit-transfer"
}
}
}
},
"expr": "(doc?.payment?.instructions == nil || doc?.payment?.instructions?.key == \"credit-transfer\")\n&& doc?.payment?.terms?.due_dates != nil",
"merge_type": "application/merge-patch+json",
"sign": false
}
},
{
"id": "fb06b190-10aa-11f0-a09e-7b63571a4ae2",
"name": "Sign envelope",
"provider": "silo.close"
},
{
"id": "86a5b230-139b-11f0-b939-af2e8ae705ac",
"name": "Generate PDF",
"provider": "pdf",
"summary": "French · A4",
"config": {
"date_format": "%Y-%m-%d",
"layout": "A4",
"locale": "fr",
"logo_height": 40
}
},
{
"id": "de2407b0-5e94-11f1-90fe-f3d836f89160",
"name": "Lookup in Directory",
"provider": "gov-fr.directory.lookup",
"next": [
{
"status": "NA",
"code": "found",
"steps": [
{
"id": "3ffd50e0-5e95-11f1-90fe-f3d836f89160",
"name": "Add flow2 addon",
"provider": "silo.modify",
"summary": "Modifications configured",
"config": {
"addons": [
"fr-ctc-flow2-v1"
]
}
},
{
"id": "1f8bf500-5e95-11f1-90fe-f3d836f89160",
"name": "Generate UBL document",
"provider": "ubl.generate",
"summary": "Peppol France CIUS UBL Invoice/CreditNote",
"config": {
"attach_invoice_pdf": false,
"doc_type": "peppol-fr-cius",
"private": false
}
},
{
"id": "9e22f4a0-485f-11f1-86b7-9745cc4d2380",
"name": "Record document for e-invoicing",
"provider": "gov-fr.directory.record"
},
{
"id": "285c9450-5e95-11f1-90fe-f3d836f89160",
"name": "Send Peppol Document",
"provider": "peppol.send"
},
{
"id": "2d6926c0-5e95-11f1-90fe-f3d836f89160",
"name": "Forward document to PPF",
"provider": "gov-fr.directory.forward"
}
]
},
{
"status": "NA",
"code": "not-found",
"steps": [
{
"id": "5cff2420-7470-11f1-9deb-cda1ffc5317f",
"name": "Add flow10 addon",
"provider": "silo.modify",
"summary": "Modifications configured",
"config": {
"addons": [
"fr-ctc-flow10-v1"
]
}
},
{
"id": "3a023fc0-5e95-11f1-90fe-f3d836f89160",
"name": "Record document for reporting",
"provider": "gov-fr.reporting.record"
},
{
"id": "aaf85b90-6996-11f1-8722-e7a7821bd54f",
"name": "Verify invoice can be sent",
"provider": "peppol.has.inboxes",
"next": [
{
"status": "NA",
"code": "true",
"steps": [
{
"id": "afcc78e0-6996-11f1-8722-e7a7821bd54f",
"name": "Generate UBL document",
"provider": "ubl.generate",
"summary": "Peppol BIS Billing UBL Invoice/CreditNote V3",
"config": {
"attach_invoice_pdf": false,
"doc_type": "bis-invoice-v3",
"private": false
}
},
{
"id": "b798c790-6996-11f1-8722-e7a7821bd54f",
"name": "Send Peppol document",
"provider": "peppol.send"
}
]
},
{
"status": "NA",
"code": "false"
}
]
}
]
}
]
},
{
"id": "3037a310-10ab-11f0-a09e-7b63571a4ae2",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `sent`{.state .sent}",
"config": {
"state": "sent"
}
}
],
"rescue": [
{
"id": "39513240-10ab-11f0-a09e-7b63571a4ae2",
"name": "Set state",
"provider": "silo.state",
"summary": "Set state to `error`{.state .error}",
"config": {
"state": "error"
}
}
]
}
Participate in our community
Ask and answer questions about Stripe App →