> ## 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.

# RO e-Factura receiving invoices guide

> Automatically import invoices received through Romania's RO e-Factura system into your Invopop workspace.

## Introduction

[RO e-Factura](https://mfinante.gov.ro/ro/web/efactura) is Romania's mandatory national e-invoicing system, run by the Ministry of Finance and [ANAF](https://www.anaf.ro). Because B2B invoices [in scope](https://docs.invopop.com/compliance/romania.md#what-is-out-of-scope) go through RO e-Factura, the invoices your suppliers *receive* are also available in the system, in their SPV — and Invopop can import them into your workspace automatically.

This guide walks you through configuring your workspace to periodically import received invoices from RO e-Factura. Two companion guides cover the rest of the family: [Romania: Supplier registration](https://docs.invopop.com/guides/ro-efactura-supplier.md) and [Romania: Issuing invoices](https://docs.invopop.com/guides/ro-efactura.md).

The import process uses two apps working together:

* **[Romania](https://docs.invopop.com/apps/romania.md):** Fetches received invoices from RO e-Factura and converts them to [GOBL](https://docs.gobl.org) format.
* **[Cron](https://docs.invopop.com/apps/cron.md):** Runs the sync workflow automatically at a regular interval (e.g., hourly or daily).

## Prerequisites

To receive invoices from RO e-Factura, you will need:

* **The Romania app connected and a registration workflow in place**: covered in the [RO e-Factura supplier registration guide](https://docs.invopop.com/guides/ro-efactura-supplier.md). Parties must be registered with the registration workflow that includes the **Subscribe to periodic execution** step.
* **The Cron app**, connected as part of the setup in this guide.

## How it works

Once everything is configured, imports run automatically:

1. **Cron scheduling**: The [Cron app](https://docs.invopop.com/apps/cron.md) creates a job for the sync workflow on the party at each configured interval
2. **Sync workflow**: The **Receive all new invoices from RO e-Factura** step asks RO e-Factura for the invoices received since the last successful sync
3. **Import jobs**: For each invoice found, a job is created using the workflow set as **Import Workflow** in the sync step
4. **Import workflow**: Each job downloads the invoice from RO e-Factura, archives it, converts it to GOBL and stores it as a new invoice in your Invopop silo
5. **Organization**: Imported invoices are placed in the configured folder (typically "Invoices · Expenses") with a Registered state

> [!NOTE]
>
> The import workflow is run by the sync workflow only. Don't run it yourself: everything is handled by configuring the sync workflow.

## Setup

All of the following steps must be carried out from the [Invopop Console](https://console.invopop.com).

> [!NOTE]
>
> The Romania app must already be connected — this is covered in the [supplier registration guide](https://docs.invopop.com/guides/ro-efactura-supplier.md).

**1. Connect the Cron app**

1. Navigate to **Configuration** → **Apps**
2. Find **Cron** in the app discovery list
3. Click **Connect** to activate

No additional configuration is needed. The [Cron app](https://docs.invopop.com/apps/cron.md) handles scheduling periodic workflow execution for importing received invoices.

**2. Configure the invoice import workflow**

This workflow imports one received invoice. It is triggered by the sync workflow (configured in the next step) for each invoice found:

1. **Import a single invoice from RO e-Factura** downloads the invoice, archives it, converts it to GOBL and stores it as a new invoice entry.
2. **Set folder** to **Invoices · Expenses**.
3. **Set state** to Registered.

> [tab] Workflow

> [tab] Code
>
> Copy and paste into a new [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) code view.
>
> > [!NOTE]
> >
> > This workflow receives the ANAF message to import as arguments set by the sync workflow, not a silo entry. It creates the invoice entry itself.
>
> ```json RO import invoice workflow theme={"system"}
> {
>     "name": "RO import invoice",
>     "description": "Import an invoice received through RO e-Factura",
>     "schema": "bill/invoice",
>     "steps": [
>         {
>             "id": "94b53e82-d12c-11f1-9a38-92000739e901",
>             "name": "Import a single invoice from RO e-Factura",
>             "provider": "gov-ro.import"
>         },
>         {
>             "id": "94b53ecb-d12c-11f1-b104-92000739e901",
>             "name": "Set folder",
>             "provider": "silo.folder",
>             "summary": "Set folder to `Invoices · Expenses`{.font-medium}",
>             "config": {
>                 "folder": "expenses"
>             }
>         },
>         {
>             "id": "94b53f0d-d12c-11f1-acc4-92000739e901",
>             "name": "Set state",
>             "provider": "silo.state",
>             "summary": "Set state to `registered`{.state .registered}",
>             "config": {
>                 "state": "registered"
>             }
>         }
>     ],
>     "rescue": [
>         {
>             "id": "94b53f54-d12c-11f1-93f4-92000739e901",
>             "name": "Set state",
>             "provider": "silo.state",
>             "summary": "Set state to `error`{.state .error}",
>             "config": {
>                 "state": "error"
>             }
>         }
>     ]
> }
> ```

**3. Configure the invoice sync workflow**

This workflow fetches the invoices a party received since the last sync and creates an import job for each one, using the import workflow you configured in the previous step.

Open the **Receive all new invoices from RO e-Factura** step and set **Import Workflow** to **RO import invoice**.

![Receive all new invoices step with Import Workflow set to RO import invoice](https://mintcdn.com/invopop/FN59cfkHlyzc_NNB/assets/guides/ro-efactura-sync-config.png?fit=max\&auto=format\&n=FN59cfkHlyzc_NNB\&q=85\&s=b6018c356bcc880b5d7dfb6d3f1b6b6f)

> [tab] Workflow

> [tab] Code
>
> Copy and paste into a new [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) code view.
>
> ```json RO sync received invoices workflow theme={"system"}
> {
>     "name": "RO sync received invoices",
>     "description": "Sync received invoices from RO e-Factura and dispatch import jobs",
>     "schema": "org/party",
>     "steps": [
>         {
>             "id": "94b53e37-d12c-11f1-b896-92000739e901",
>             "name": "Receive all new invoices from RO e-Factura",
>             "provider": "gov-ro.sync"
>         }
>     ],
>     "rescue": []
> }
> ```

**4. Configure the cron step of the registration workflow**

The **RO register party** workflow ends with the **Subscribe to periodic execution** step, which tells the [Cron app](https://docs.invopop.com/apps/cron.md) which workflow to run on the party and how often. Open the step and configure:

1. **Workflow** — select the **RO sync received invoices** workflow you created in the previous step. The Cron app runs it on each tick.
2. **Every** and **Unit** — choose how often RO e-Factura should be checked for new invoices (for example, every 12 hours).

![Subscribe to periodic execution step configured with the sync workflow and interval](https://mintcdn.com/invopop/FN59cfkHlyzc_NNB/assets/guides/ro-efactura-cron-config.png?fit=max\&auto=format\&n=FN59cfkHlyzc_NNB\&q=85\&s=567072ef5d6b61f3115304b3c3405e2b)

> [tab] Workflow

> [tab] Code
>
> Copy and paste into a new [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) code view.
>
> ```json RO register party workflow theme={"system"}
> {
>     "name": "RO register party",
>     "description": "Register a party with RO e-Factura (ANAF)",
>     "schema": "org/party",
>     "steps": [
>         {
>             "id": "94ab9ba5-d12c-11f1-9d7a-92000739e901",
>             "name": "Set state",
>             "provider": "silo.state",
>             "summary": "Set state to `processing`{.state .processing}",
>             "config": {
>                 "state": "processing"
>             }
>         },
>         {
>             "id": "94b535f3-d12c-11f1-a18c-92000739e901",
>             "name": "Register with ANAF",
>             "provider": "gov-ro.register"
>         },
>         {
>             "id": "94b536fa-d12c-11f1-8d76-92000739e901",
>             "name": "Wait ANAF link registration",
>             "provider": "gov-ro.wait.register"
>         },
>         {
>             "id": "94b53785-d12c-11f1-b646-92000739e901",
>             "name": "Set state",
>             "provider": "silo.state",
>             "summary": "Set state to `registered`{.state .registered}",
>             "config": {
>                 "state": "registered"
>             }
>         },
>         {
>             "id": "94b537f3-d12c-11f1-b146-92000739e901",
>             "name": "Subscribe to periodic execution",
>             "provider": "cron.subscribe",
>             "summary": "Periodic RO e-Factura sync"
>         }
>     ],
>     "rescue": [
>         {
>             "id": "94b53867-d12c-11f1-a89c-92000739e901",
>             "name": "Set state",
>             "provider": "silo.state",
>             "summary": "Set state to `error`{.state .error}",
>             "config": {
>                 "state": "error"
>             }
>         }
>     ]
> }
> ```

## Running

### Register a party for receiving

Register each party whose received invoices you want to import by running the **RO register party** workflow on their party entry. The steps — creating the party, running the workflow and completing the ANAF authorization — are described in the [supplier registration guide](https://docs.invopop.com/guides/ro-efactura-supplier.md#register-a-supplier).

> [!NOTE]
>
> Invoices are imported from the moment the party completes its registration. Invoices received before that are not imported.

> [!NOTE]
>
> If a party was registered without the subscribe step, run the registration workflow with the step on the same party entry to subscribe it to periodic imports.

### Automatic import

Once parties are registered, the [Cron app](https://docs.invopop.com/apps/cron.md) runs the sync workflow at the interval configured in the **Subscribe to periodic execution** step, following the process described in [How it works](#how-it-works). Imported invoices appear in the configured folder (typically "Invoices · Expenses") with a Registered state.

![Imported invoice in Registered state with the official ANAF XML](https://mintcdn.com/invopop/FN59cfkHlyzc_NNB/assets/guides/ro-efactura-imported.png?fit=max\&auto=format\&n=FN59cfkHlyzc_NNB\&q=85\&s=fde7c140c09b571a628b2b34426d13e4)

To keep the official archive ANAF signed, download it with [Fetch received archive](https://docs.invopop.com/api-ref/apps/gov-ro/received-archive-fetch.md).

Each sync picks up where the last successful one finished, so no invoice is missed when a sync fails or runs late. ANAF keeps received invoices for 60 days, so make sure the sync runs at least that often.

### Sync on demand

To fetch new invoices without waiting for the next tick, run the **RO sync received invoices** workflow on the party entry, from the Console or with the [Create a job endpoint](https://docs.invopop.com/api-ref/transform/jobs/create-a-job-post.md). It imports everything received since the last successful sync.

### Error handling and notifications

We strongly recommend adding notification steps to your workflows to alert you of import failures:

* **In the import workflow**: Add email or Slack notifications to the error handling section
* **In the sync workflow**: Add notifications for when the sync process encounters issues

This ensures you're immediately aware if invoices fail to import, allowing you to take corrective action.

> [!TIP]
>
> Common sync issues include an expired ANAF authorization (register the party again), missing SPV rights for the certificate holder, and ANAF being temporarily unavailable. Check your workflow error logs in the Console for detailed error messages.

## FAQ

> [accordion] Which invoices are imported?
>
> Invoices other companies issued to the registered party and that ANAF made available in its SPV, from the moment the party completed registration. Invoices received before registration are not imported.

> [accordion] Do I need to run the import workflow myself?
>
> No. The **RO sync received invoices** workflow creates one import job per received invoice, using the workflow set as **Import Workflow** in its **Receive all new invoices from RO e-Factura** step. Don't run the import workflow directly.

> [accordion] What happens if the sync stops for a while?
>
> Each sync picks up from where the last successful one finished, so no invoice is missed. ANAF keeps messages for 60 days, so a party that stops syncing for longer loses the older ones.

> [accordion] What is stored for an imported invoice?
>
> The ANAF archive is kept in Invopop's database, and a new invoice entry is created in the silo with the invoice converted to GOBL. The workflow then sets the folder and state, typically **Invoices · Expenses** and Registered.

More available in our [Romania FAQ](https://docs.invopop.com/faq/romania.md) section

***

> [accordion] 🇷🇴 Invopop resources for Romania
>
> | | |
> | - | - |
> | Compliance | [Invoicing compliance in Romania](https://docs.invopop.com/compliance/romania.md)   [Compliance timeline](https://docs.invopop.com/timelines/romania.md) |
> | Apps | [Romania](https://docs.invopop.com/apps/romania.md) |
> | Guides | [Supplier registration](https://docs.invopop.com/guides/ro-efactura-supplier.md)   [Issuing invoices](https://docs.invopop.com/guides/ro-efactura.md)   [Receiving invoices](https://docs.invopop.com/guides/ro-efactura-receiving.md) |
> | FAQ | [Romania FAQ](https://docs.invopop.com/faq/romania.md) |
> | GOBL | [Romanian RO e-Factura addon](https://github.com/invopop/gobl.ro.anaf/tree/main/addon) |

> [card] [Participate in our community](https://community.invopop.com)
>
> Ask and answer questions about invoicing in Romania →


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.