> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invopop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Stripe Guide

> Import and process invoices and credit notes from Stripe

## Introduction

In this guide, you'll learn how to connect [Stripe](https://stripe.com/) with Invopop to automatically generate tax-compliant invoices and credit notes, from your Stripe dashboard.

The Stripe integration consists of two components:

1. An Invopop app within your Stripe dashboard
2. An app in your Invopop console

When a Stripe invoice or credit note reaches the [finalized status](https://support.stripe.com/questions/invoice-states), our integration will automatically create a new job in your selected Invopop workflow.

<Frame caption="Track invoice status directly in your Stripe dashboard">
  <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-details.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=7bbe187a7a40b1b33aeb825f93c9f665" alt="stripe details" width="2878" height="1378" data-path="assets/guides/stripe-details.png" />
</Frame>

The job will extract the invoice data from Stripe and execute the actions, such as converting it to any e-invoice format and submitting it to your local tax authority.

<Frame caption="View the job information">
  <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-job-details.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=3da0308220d997196f91fb8581e53d38" alt="stripe job" width="1454" height="691" data-path="assets/guides/stripe-job-details.png" />
</Frame>

## Setup

Before you begin, ensure you have an active Stripe account.

<Steps>
  <Step title="Install Invopop in Stripe">
    Navigate to the [Invopop app](https://marketplace.stripe.com/apps/invopop) in Stripe's App Marketplace and click **Install**.
    Next, Stripe will prompt you to select the Stripe environment you'd like to connect to, you can start with test mode or sandbox and switch to live later.

    <Frame caption="Install Invopop in Stripe">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-install.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=18249659c041224f2ca04f97ab50a5fa" alt="stripe install" width="2806" height="1800" data-path="assets/guides/stripe-install.png" />
    </Frame>
  </Step>

  <Step title="Connect Stripe to Invopop">
    After installation, you should be  redirected to your Stripe dashboard and see the Invopop app in the right sidebar. Alternatively, just open the Invopop app in your [Stripe dashboard](https://dashboard.stripe.com/apps/invopop).

    Click **Connect Invopop**. The next page will ask you to login to your Invopop account. If you're new to Invopop, the connection process will guide you through creating your Invopop account and setting up your first workspace.

    <Note>
      When connecting a test or sandbox environment in Stripe, select a sandbox workspace in Invopop. For live environments, select a live workspace.
    </Note>

    <Frame caption="Connect your Invopop account">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-connect.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=23bc0fb5ed7cdc5f49a761f808fd8eed" alt="stripe connect" width="2880" height="1556" data-path="assets/guides/stripe-connect.png" />
    </Frame>
  </Step>

  <Step title="Select a workspace">
    After connecting your Invopop account to Stripe, you'll be redirected back to Stripe to choose the workspace where you want to process your invoices.

    <Frame caption="Choose your workspace">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-select-workspace.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=5e1133335865321dd5b225036f335c4d" alt="stripe select workspace" width="2872" height="1464" data-path="assets/guides/stripe-select-workspace.png" />
    </Frame>
  </Step>

  <Step title="Configure your workflow">
    Select or create a workflow to process your invoices and credit notes.

    To use an existing workflow select it from the Stripe's sidebar menu and click **Save Workflow**

    To create a new workflow click on **Create New Workflow** in the sidebar menu. You'll be redirected to Invopop.

    <Tabs>
      <Tab title="Template">
        Select one of the following workflow templates:

        <CardGroup cols="1">
          <Card iconType="duotone" title="Stripe - VERI*FACTU invoice workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=es-verifactu-invoice" cta="Add to my workspace">
            This workflow will sync with Stripe to issue a VERI\*\FACTU invoice on finalized sales.
          </Card>

          <Card iconType="duotone" title="Stripe - Basic PDF invoice workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=es-verifactu-invoice" cta="Add to my workspace">
            This workflow will sync with Stripe to generate a PDF invoice on finalized sales.
          </Card>
        </CardGroup>
      </Tab>

      <Tab title="Code">
        Copy and paste into a new [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) code view.

        <AccordionGroup>
          <Accordion title="Example Workflow - Stripe VERI*FACTU">
            This workflow demonstrates the Stripe integration with a basic PDF workflow.

            ```json Example Stripe to VERI*FACTU Workflow theme={"system"}
            {
              "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"
                  }
                }
              ]
            }
            ```
          </Accordion>

          <Accordion title="Example Workflow - Basic PDF">
            This workflow demonstrates the Stripe integration with country-specific functionality.

            ```json Example Stripe PDF workflow theme={"system"}
            {
              "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"
                  }
                }
              ]
            }
            ```
          </Accordion>
        </AccordionGroup>
      </Tab>

      <Tab title="Build from scratch">
        In [Console](https://console.invopop.com) create a new workflow and select [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) in the template selector, then add the following steps:

        <Frame>
          <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-import.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=946b1c5a2ab2ab1a64dea88a615d1d74" alt="stripe import" width="1562" height="278" data-path="assets/guides/stripe-import.png" />
        </Frame>

        1. Add the **Import invoice from Stripe** step as the first step of the workflow.
        2. Configure the workflow according to your local regulations. You can copy *the Basic PDF workflow* example below and modify it later for your local needs.

        Finally, in the Error Handling area, add the **Set state** action and select "Error" in the State dropdown.
      </Tab>
    </Tabs>
  </Step>

  <Step title="Show your tax ID on invoices">
    By default, Stripe does not display your tax ID on invoices. To enable it, go to Settings > Billing > Invoices. In the `Invoice Tax Information` section, enter your tax ID, set it as the default, and click **Save**.

    <Frame caption="Show your tax ID on invoices">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-tax-id.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=68b6925bb85d824b981fcf65dd7f8bd7" alt="stripe tax id" width="2330" height="698" data-path="assets/guides/stripe-tax-id.png" />
    </Frame>
  </Step>

  <Step title="Verify your setup">
    1. Navigate to [Stripe app settings](https://dashboard.stripe.com/settings/apps/com.invoicing.invopop)
    2. Confirm your workflow configuration is correct

    <Frame caption="Review your configuration">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-settings.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=038a1599a2a5d3ab869620c423efd528" alt="stripe settings" width="2854" height="1450" data-path="assets/guides/stripe-settings.png" />
    </Frame>
  </Step>
</Steps>

## Monitor invoice processing

After setup, finalized Stripe invoices are imported into Invopop automatically and saved to the `Sales` folder. Use the steps below to verify status, review details, retry processing, and import historical invoices.

<Steps>
  <Step title="Check invoice status in Stripe">
    Open the invoice in Stripe and check the Invopop panel in the right sidebar to confirm whether processing succeeded.

    <Frame caption="Invoice processed successfully in Stripe">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-invoice-success.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=a8f2e6c13edf74e505a42eb00eabf4b5" alt="stripe invoice status" width="1442" height="690" data-path="assets/guides/stripe-invoice-success.png" />
    </Frame>
  </Step>

  <Step title="Check invoice status in Invopop">
    In the Invopop console, go to `Sales` and open the invoice to view its status. To review the underlying processing job, go to `Workflows` > `History` and open the job details.

    <Frame caption="Job details in Invopop">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-invopop-job.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=0ac3eb5a566bc05a7c875bdf81cd4899" alt="stripe job details" width="1436" height="776" data-path="assets/guides/stripe-invopop-job.png" />
    </Frame>
  </Step>

  <Step title="Troubleshoot import errors">
    If an invoice fails, it is usually one of two cases:

    1. The invoice was not imported into Invopop because converting from Stripe to Invopop failed. Update the data in Stripe and click **Retry** in the Invopop panel.

    <Frame caption="Retry invoice">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-retry-import.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=29cb2002ed94905345998b9c8f32dc35" alt="stripe retry invoice" width="1443" height="685" data-path="assets/guides/stripe-retry-import.png" />
    </Frame>

    2. The invoice was imported into Invopop but submission to the tax authority failed. Correct the invoice in Invopop and re-run a workflow that omits the **Import invoice from Stripe** step to avoid reimporting the original data. Typical causes include missing required fields or invalid field formats.

    <Frame caption="Incorrect invoice details">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-invoice-wrong-details.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=06c3e5e606a0e0ad556ec5750263ed50" alt="stripe retry invoice" width="1442" height="730" data-path="assets/guides/stripe-invoice-wrong-details.png" />
    </Frame>
  </Step>

  <Step title="Get notified of failures">
    Add a notification action in your workflow's Error Handling section—Slack, email, or webhook—so you're alerted when an import fails.
  </Step>
</Steps>

If you need help tailoring a workflow to your use case, contact us at [support@invopop.com](mailto:support@invopop.com).

## FAQ

<AccordionGroup>
  <Accordion title="Can I change the workflow that processes my invoices to a different one?">
    Yes, you can, at any time select a different workflow to sync your Stripe invoices. You can do this both from Stripe or Invopop.

    Option 1: From Stripe

    1. Go to [Stripe app settings](https://dashboard.stripe.com/settings/apps/com.invoicing.invopop)
    2. Select a different workflow
    3. Click **Save changes**

    <Frame caption="Select a different workflow in Stripe">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-settings.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=038a1599a2a5d3ab869620c423efd528" alt="stripe change workflow" width="2854" height="1450" data-path="assets/guides/stripe-settings.png" />
    </Frame>

    Option 2: Through Invopop

    1. Navigate to the **Apps** section in your [Invopop console](https://console.invopop.com/)
    2. Locate the Stripe app settings
    3. Select your new workflow

    <Frame caption="Select a different workflow in Invopop">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-invopop-settings.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=cee0cd319d2002ee5f7b9ffb73ae3278" alt="stripe change workflow" width="2878" height="1558" data-path="assets/guides/stripe-invopop-settings.png" />
    </Frame>
  </Accordion>

  <Accordion title="How can I switch to a different Invopop workspace?">
    You can switch to the Stripe connection to a different workspace by disconnecting and reconnecting the app.

    1. Go to [Stripe app settings](https://dashboard.stripe.com/settings/apps/com.invoicing.invopop)
    2. Click the **Disconnect** button
    3. Reconnect the app and select your new workspace
  </Accordion>

  <Accordion title="How can I add a Purchase Order number to the invoice?">
    Stripe does not include a dedicated Purchase Order field on invoices. Add it as a custom field named `PO Number`.

    You can add the custom field in any of these places:

    * The specific invoice
    * The subscription
    * An invoice template
  </Accordion>

  <Accordion title="Can I import historical invoices (issued before I connected Invopop)?">
    Yes. Open the invoice in Stripe and click **Process this invoice** in the Invopop panel (right sidebar).

    Note: The invoice issue date will be set to the sync date (today), as required by tax agencies. The operation date remains the original date of the transaction.

    <Frame caption="Import historic invoices">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-import-historic-invoices.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=f6f59735883724d656ffb448b7646e51" alt="stripe import historic invoices" width="1440" height="731" data-path="assets/guides/stripe-import-historic-invoices.png" />
    </Frame>
  </Accordion>

  <Accordion title="Can I import invoices when paid instead of when finalized?">
    Yes. You can import on payment instead of on finalization. Update the invoice import trigger in either Stripe or Invopop:

    Option 1: In Stripe

    1. Go to [Stripe app settings](https://dashboard.stripe.com/settings/apps/com.invoicing.invopop)
    2. In "Invoice Import Trigger", select "When Paid" (instead of "When Finalized").
    3. Click **Save Changes**.

    <Frame caption="Update invoice import trigger in Stripe">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-import-trigger.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=cb8effc105b08d07d9a4b04b47407b3e" alt="stripe import trigger" width="2880" height="1370" data-path="assets/guides/stripe-import-trigger.png" />
    </Frame>

    Option 2: In Invopop

    1. Go to **Configuration** > **Apps** > **Stripe** > **Configure**.
    2. Click **Update Settings**.
    3. In "Invoice import trigger", select "When Paid" (instead of "When Finalized").
    4. Click **Save**.

    <Frame caption="Update invoice import trigger">
      <img src="https://mintcdn.com/invopop/gj0LtB6xhc-5_Lcq/assets/guides/stripe-when-paid.png?fit=max&auto=format&n=gj0LtB6xhc-5_Lcq&q=85&s=54ca8f32750456dafa81efc63728193e" alt="stripe import trigger" width="2886" height="1554" data-path="assets/guides/stripe-when-paid.png" />
    </Frame>

    Note: This applies to invoices from now on; it does not change past imports.
  </Accordion>

  <Accordion title="I get an &#x22;access denied: unexpected tax regime&#x22; error when processing invoices">
    This error means the invoice's tax regime does not match the one expected by the workflow step. For example, Verifactu requires a Spanish regime and KSeF requires a Polish regime. The regime is automatically determined by the supplier's tax ID country.

    The most common cause is that the supplier's tax ID is missing from the invoice. To fix this, make sure you have completed Step 5 of the [setup](#setup): go to **Settings** > **Billing** > **Invoices**, enter your tax ID, and set it as the default. Stripe does not automatically include your account tax ID on invoices.

    Once the tax ID is set as default, it will appear on new invoices and the error should disappear.
  </Accordion>
</AccordionGroup>

<Card title="Participate in our community" icon="forumbee" href="https://community.invopop.com" arrow="true" horizontal>
  Ask and answer questions about Stripe integration →
</Card>
