VERIFACTU PROEspañol · English

User guide

How Verifactu Pro works and how to set it up — Last updated: 8 October 2026

1. What it is and how it works

Verifactu Pro automatically issues an electronic invoice compliant with Spain's Verifactu regulation (Royal Decree 1007/2023) for every order paid in your Shopify store. You don't have to do anything manually: the app generates the invoice when the order is paid, or at the moment you prefer (when it ships, when it's delivered or a few days later; see section 7).

Each invoice automatically includes:

  • Sequential, immutable numbering per series and tax year (no gaps).
  • SHA-256 hash chained to the previous invoice (any tampering is detectable).
  • "QR tributario" (tax QR code) so the buyer can check the invoice on the AEAT website (with the "VERI*FACTU" legend when your connection to the AEAT is active).
  • PDF emailed to the buyer, in their language (you can turn the automatic sending off — see section 7).

Two operating modes

  • VERI*FACTU (Pro plan): each invoice record is sent to the AEAT in real time through the official web service, using your digital certificate. The AEAT accepts the record and returns a secure code (CSV). In this mode the tax authority keeps custody of the records.
  • NO VERI*FACTU: records are not sent to the AEAT. The app signs each record with your certificate (XAdES signature), keeps them, maintains the event log (with a summary every 6 hours), checks their integrity every day and raises an alarm if something is wrong. If the AEAT requires them, you send them from Export. This is the free plan's mode.

2. Getting started (initial setup)

Before issuing your first invoice, complete these steps from the app menu:

  1. Tax settings → Issuer details: enter your tax ID (CIF/NIF), business name, address and your tax regime (general, equivalence surcharge or VAT-exempt). They appear on every invoice. Until you fill in the tax ID and business name, orders are not invoiced (you'll see a notice on the dashboard).
  2. Electronic certificate (both modes): upload the holder's qualified certificate (e.g. FNMT) .p12/.pfx and its password, that of an authorised representative, or the company's electronic seal certificate. It is stored encrypted. Seal certificates are sent to the address the AEAT reserves for them: the app detects the type by itself and you can also set it by hand. In VERI*FACTU it is used to send the records to the AEAT; in NO VERI*FACTU, to sign them (mandatory from 2027).
  3. Mode: choose VERI*FACTU (Pro) or NO VERI*FACTU. In VERI*FACTU, pick the environment: "Testing" (to validate with no tax effect) or "Production" (real submissions). Once real records have been sent to the AEAT in a year, VERI*FACTU stays until 31 December.
  4. Turn off Shopify's native VAT invoices: in Settings → Taxes and duties → VAT invoices, disable Shopify's automatic generation. Otherwise you'd have two parallel invoice numberings. The app detects this conflict and warns you.
Tip: start in Testing mode, place a test order and confirm the invoice is issued and (in active mode) accepted by the AEAT. Then switch to Production. Also check section 7 (invoicing options) to decide when the invoice is issued and whether it's emailed to the customer.

3. The buyer's tax ID (NIF): where to enter it

The buyer's tax ID determines the invoice type:

  • With tax ID → full invoice (F1), including the customer's tax details.
  • Without tax ID → simplified invoice (F2), valid for small amounts.

So customers can provide their tax ID, Verifactu Pro offers five capture points. Enable whichever you like; the value is reused across them. It accepts Spanish NIF/DNI/NIE/CIF as well as EU and non-EU tax identifiers (for foreign customers).

The tax ID is checked as the customer types it (control letter of the DNI/NIE, control digit of the CIF, format of an EU VAT number) and, if it isn't valid, they're told what's wrong ("the letter is missing", "the letter doesn't match"…). The account doesn't save a wrong tax ID. On the cart and at checkout the customer is warned but not blocked: if they go ahead with a mistyped tax ID, the invoice is held for you to correct it (section 4), instead of being issued without it.

a) On the cart

The "Verifactu · NIF on the cart" extension. Enable it from your theme editor (Customize → Cart page → Add block → apps → NIF). It adds a "Tax ID" field to the cart. What the customer types travels with the order and the app picks it up when invoicing.

b) At checkout (Shopify Plus only)

The "Tax ID at checkout" extension. It appears on the payment screen, right below the contact details, and is enabled from the Checkout editor (Settings → Checkout → Customize). This is the most natural moment for a customer who needs an invoice to provide their tax ID. Note: Shopify only lets you add custom fields to the checkout page on Shopify Plus plans. If your store isn't Plus, use the other options (cart, customer account and thank-you page), which work on any plan.

c) In the customer account

The "Verifactu · NIF in the account" extension. It shows a tax ID field in the customer's account profile and on the order-status page. The tax ID is saved on the customer record (metafield) and automatically reused on their future purchases: the cart and checkout fields will be pre-filled.

You can also see and type that same value yourself in the Shopify admin, on each customer's page: the "NIF / CIF" field, in the metafields section. Handy for regular customers who give it to you by phone or in store.

Shopify B2B orders (you sell to a company, with a contact buying on its behalf): the invoice goes to the company, with the tax ID and billing address of its company record in Shopify (Customers → Companies), not to the contact.

d) On the thank-you page, after paying

The block "Need an invoice with your tax ID?" (extension "NIF/CIF en el checkout", on any plan). Add it from the Checkout editor, on the Thank you page. A customer who paid without a tax ID can add it right there, with their name or company name, and the invoice for that order carries it:

  • If you invoice when paid, an online order without a tax ID waits up to 5 minutes before being issued. If the customer adds the tax ID in that time, the invoice is issued right then, already as a full invoice (F1). If not, it goes out after 5 minutes as usual. POS sales and orders that already carry a tax ID don't wait.
  • If you invoice on shipment, on delivery or after X days, the tax ID is saved and the invoice carries it when issued.
  • If the invoice had already been issued without a tax ID (the customer comes back to the page later, within 24 hours), it's replaced by a full one with their tax ID, just as you'd do from the admin.

The tax ID is checked as it's typed and also saved on the customer for their next orders. For security, it's only accepted from that same order's thank-you page (with its confirmation number) and for 24 hours.

Automatic tax ID detection

If the order doesn't bring the tax ID in any of these fields, Verifactu Pro looks for it in the order details, because many customers type it wherever they can: in the company, the address (lines 1 and 2), the name and the phone, of both the billing and the shipping address, and in the order notes. So nothing wrong slips in:

  • It only accepts Spanish NIF, NIE or CIF with a valid control letter or digit (with or without "ES" in front). VAT numbers of other EU countries, only in the Company field.
  • If it finds two different tax IDs (e.g. the buyer's and a gift recipient's), it uses none.
  • On the invoice, the tax ID is removed from where it was written: a company "ACME SL (B12345674)" shows as "ACME SL".
  • Where it was found never appears on the invoice; only you see it, in the invoice detail in the admin and in the activity log.
  • What the customer types in a tax ID field (cart, checkout, thank-you page) or has saved on their record always wins over a detected tax ID. And a detected one is only saved on the customer if they had none.

You can turn it off in Settings → Capture the buyer's NIF. Then only the tax ID from the fields above is used.

e) In the admin (after the fact)

If an issued invoice has no tax ID, or it needs correcting, open it in Invoices → (the invoice) → Edit customer details and add the tax ID. Depending on its status:

  • If the invoice is pending, held or rejected by the AEAT, it's updated in place and sent with the new details.
  • If it's already issued (accepted by the AEAT, or recorded without submission while the connection is off), the original is never altered, as the law requires: its record and fingerprint are already sealed. What the app does depends on the case:
  • A simplified invoice the customer adds a tax ID to (they ask for a full invoice days later): the app issues a new full invoice "in substitution of a simplified invoice" (type F3, art. 7.2 RD 1619/2012) with its own number. It is not a corrective: the simplified invoice stays as it was and the full one does not count again for VAT. You can choose its series in Series → "Series for full invoices on request (canje)". If that sale is later refunded, the app also issues the full invoice in negative.
  • Any other change (e.g. fixing the details of a full invoice): the app issues a corrective invoice by substitution with the fixed details.
When you save a tax ID on an invoice from the admin, the app remembers it for that customer, so their future orders come pre-filled.

4. Held invoices (missing or invalid tax ID)

Spanish law (art. 4 of RD 1619/2012) does not allow a simplified invoice when the amount exceeds €3,000 (VAT included). Above that threshold the buyer must be identified by their tax ID.

What the app does automatically

With the connection to the AEAT active, if an order over €3,000 arrives without the buyer's tax ID, Verifactu Pro holds the invoice:

  • It marks it as "Held (missing tax ID)".
  • It does not send it to the AEAT (a non-compliant invoice cannot be recorded).
  • It warns you on the dashboard and you can filter it in the invoice list ("Invoices without tax ID").

How to resolve it

  1. Contact the customer and obtain their tax ID (or ask them to add it in their account).
  2. Open the held invoice and use "Edit customer details" to add the tax ID (and name/tax address if needed).
  3. The app turns it into a full invoice (F1) and, in active mode, sends it to the AEAT.
A sale carrying equivalence surcharge without a tax ID is held for the same reason (with the connection to the AEAT active): that regime requires an identified buyer (art. 61 RIVA), so it must be a full invoice (F1). Add the tax ID and it's sent as an F1, no correction needed. You can enable an email alert when an invoice is held (see section 7).

Invalid tax ID

If the customer asked for an invoice by typing a tax ID on the cart, at checkout or in their account, but that tax ID isn't valid (missing letter, wrong control letter, incomplete…), the app doesn't issue it without a tax ID as if they hadn't asked: it holds it as "Held (invalid tax ID)", in any mode and whatever the amount. The invoice shows what the customer typed.

  1. Ask the customer for the right tax ID, click "Correct NIF" and then "Issue invoice" (or "Send to AEAT" in active mode): it goes out as a full invoice (F1).
  2. If the customer doesn't give you a valid one, click "Issue without NIF (simplified invoice)": it goes out as an F2, like a sale without a tax ID. This option isn't available if the invoice is over €3,000 or carries equivalence surcharge, because then the tax ID is mandatory.

At the POS, the order's Verifactu button shows the hold with the same two options: "Enter the tax ID" (billing details) or "Issue without NIF (simplified)". Only what the customer typed in a tax ID field counts: if the app finds something that looks like a tax ID elsewhere (the company name, the phone or a note) and it isn't valid, it simply ignores it.

A tax ID with the right format and letter that doesn't exist in the tax authority's census can't be detected while typing: in active mode the AEAT rejects the invoice, you get the rejection alert and you correct and resend it from the same invoice.

5. Invoice types, refunds and corrections

The app handles the full invoice lifecycle in line with the regulation:

  • F1: full invoice (with the customer's tax ID). F2: simplified invoice (no tax ID, small amounts).
  • Refunds: when you create a refund in Shopify, a corrective invoice (R4/R5) with negative amounts is issued automatically, referencing the original.
  • Cancellation: from the invoice detail, the "Cancel" button issues a corrective invoice by substitution (R1/R5).
  • If the corrective invoice itself has wrong details: open it and use "Edit customer details". Another corrective invoice is issued that replaces it, as the law requires (a corrective invoice is fixed with another one, never edited). Refund credit notes are the exception: fix their details on the invoice they credit.
  • Editing an already-invoiced order: the app issues the matching correction.
  • Invoicing an annulled order again: if you annulled an order's invoice (e.g. because the customer details were wrong), open the annulled invoice and click "Invoice order … again". A new invoice is issued with the order's current data in Shopify; the annulled one doesn't change and the order isn't duplicated. If a refund comes later, the credit note rectifies the new invoice.

You can route corrective invoices to a dedicated series or have them inherit the series of the original — configured in the Series section (see section 6). Numbering is independent per series, but the hash chain is unique to your business.

Printing the invoice from the order

On the order page in the Shopify admin, open More actions → Print → "Factura Verifactu". You will see the order invoice and its corrective invoices: choose which to print and the A4 PDF is generated, without opening the app. At the POS, every order also has the "Ticket Verifactu" action to print or send the receipt.

6. Series: numbering and configuration

A series is an invoice numbering line. Within each series, the app numbers sequentially, with no gaps, per tax year; once an invoice is issued, its number is immutable. Everything is managed in the Series section. Multiple numbering is a Pro feature; on the Free plan a single series "A" is used.

Create a series

Click "New series" and enter a code (1-10 characters, letters and numbers), an optional description and, if needed, a starting number to continue a previous numbering (for example, if you were already issuing invoices before installing the app).

Default series

Set a series as the default: it's the one applied to new invoices unless a more specific rule says otherwise.

Series by invoice type

  • Standard (F1): full invoices (with tax ID). Handy to continue your previous numbering in its own series.
  • Simplified (F2): sales without a tax ID (≤ €3,000), numbered separately from F1.
  • Corrective: cancellations, refunds and substitutions. Give them their own series or inherit the series of the original invoice.
  • Subscriptions: renewal invoices can use their own series.

Series by channel and by country

  • By sales channel: assign a series to a specific channel (e.g. Shopify POS for in-store sales); everything else uses the default series.
  • By destination country: assign the series (standard, simplified and corrective) based on the buyer's country. Countries you don't configure use the general series.

Invoice number format

You can customise how the number is composed for each series with tokens: {SERIE} = series · {AAAA}/{AA} = year (4/2 digits) · {N4} = zero-padded number (or {N} unpadded, {N6}…). The rest are literals (separators or prefixes: -, /, FRA-…). A format without a year token makes the series number continuously across fiscal years (no yearly reset).

Which series applies (priority)

When several rules match, the order is: subscription → invoice type (standard/simplified), replaced by the per-country series if the country matches → sales channel → default series.

All series changes only affect new invoices; nothing already issued is renumbered. A series that already has issued invoices cannot change its starting number.

7. Invoicing options

In Settings you can tune how automatic invoicing behaves:

When the invoice is issued

  • When paid — default: the invoice is issued as soon as the order is marked as paid. An online order without a tax ID waits up to 5 minutes in case the customer adds it on the thank-you page (section 3); POS sales and orders with a tax ID don't wait.
  • When fulfilled (shipped/prepared): the invoice is issued when the order is fulfilled. Orders cancelled before fulfilment are never invoiced.
  • When the order is delivered: the invoice is issued when every shipment of the order shows as delivered in Shopify. It requires a manual action: marking each order with "Mark as delivered", unless the carrier's tracking already reports it to Shopify (only some do). The app checks every hour. If it isn't delivered within the days you set (30 by default), the invoice is issued anyway, so no order is left uninvoiced. POS sales and orders with nothing to ship are invoiced on payment; orders cancelled or refunded before delivery aren't invoiced. The invoice's operation date is the order (payment) date, which is when VAT falls due on a prepaid sale.
  • X days after payment (1-60): the invoice is issued after that many days. Orders cancelled or refunded before then are not invoiced.

Delaying issuance helps you avoid invoicing orders that get cancelled or returned right after purchase.

Sales to other EU countries (One Stop Shop, OSS)

While you sell below the €10,000 yearly threshold to consumers in other EU countries, Shopify charges Spanish VAT and the app invoices them like any sale in Spain. When you register in the One Stop Shop (OSS) and turn on "Collect through One-Stop Shop (OSS) registration" in Shopify Tax, also tick the box and set the registration date in Settings → Sales to other EU countries (OSS). From that date, on orders from consumers in another EU country:

  • The invoice keeps the destination country, the base, that country's VAT rate and its amount exactly as Shopify Tax calculates them, and states "Destination VAT (OSS)".
  • It is reported to the AEAT as an operation under the One Stop Shop (regime code 17), not subject to Spanish VAT under the place-of-supply rules.
  • Credit notes (full or partial refunds, annulments, substitutions) keep the same treatment as the original invoice.
  • Reports gives you the breakdown by destination country, rate, base and VAT per quarter for the Modelo 369, separate from Spanish VAT.

Sales in Spain and to businesses with an EU VAT number don't change. The app doesn't file the Modelo 369: it gives your accountant the data to prepare it.

Warnings. The app compares what Shopify charges with your Settings and warns you on the dashboard, in Reports and by email (with email alerts on):

  • If Shopify charges another country's VAT and the One Stop Shop is not on in the app, the invoice is held (it isn't issued with Spanish VAT). Once you turn it on, it is issued automatically.
  • If the One Stop Shop is on but Shopify charges Spanish VAT to a consumer in another country, the invoice is issued with the VAT charged and you are warned to check Shopify's tax settings.
  • While the One Stop Shop is off, you are warned at 80% of the €10,000 yearly sales to consumers in other EU countries, when you exceed it and if you exceeded it last year, as invoiced with the app.
  • If Shopify charges no VAT on a sale in Spain (usually customers marked as tax-exempt), the invoice includes the VAT in what was paid, as it is owed anyway, and you are warned.

Sales to businesses in other EU countries (B2B)

When you sell without VAT to a business in another EU country with a VAT number (e.g. Shopify treats it as exempt), the app recognises it automatically, with nothing to set up: it issues a full invoice with the customer's VAT number and reports it to the AEAT as an exempt intra-Community supply (art. 25 Ley 37/1992) for physical products, or as a service under reverse charge for digital products (those that don't require shipping). The invoice states the legal ground, credit notes keep the same treatment, and Reports gives you the breakdown by customer and key (E / S) for the Modelo 349 and box 59 of the 303. The VAT number is taken from the app's tax-ID fields or from an order field named "NIF", "VAT number" or "Tax ID".

You can also show Shopify's "Company VAT number" field at checkout (Settings → Checkout). Shopify checks it in VIES and, if it's valid and the sale goes to another EU country, removes the VAT. The app uses that number when the customer hasn't entered another in the app's tax-ID field, and always when Shopify removed the VAT for it, as it's the one that justifies the exemption. It doesn't replace the app's tax-ID field: Shopify only keeps numbers that are in VIES, so it won't hold the NIF of private customers, nor of most freelancers and companies that only sell in Spain.

VIES check. The exemption requires the customer to be registered in VIES, the EU register of intra-Community traders. When each of these invoices is issued, the app checks the VAT number in VIES with your tax ID as requester and keeps the result with the consultation number, which serves as proof. You see it in the invoice detail in the admin and in the "VIES" column of the 349 report. If VIES says it's not valid, the invoice isn't blocked (the order was already charged without VAT), but it's flagged and you get an email alert to review it with your advisor. If VIES doesn't answer, which happens often, the app retries for 48 hours; you can also click "Check now in VIES" on the invoice.

Sales outside the EU (exports), Canary Islands, Ceuta and Melilla

When you ship without VAT to a destination outside the EU VAT territory (e.g. the United States, Switzerland or the United Kingdom) or to the Canary Islands, Ceuta or Melilla from the mainland, the app recognises it automatically: physical products are reported to the AEAT as an exempt export (art. 21 Ley 37/1992) and digital products as an operation not subject to Spanish VAT (art. 69). The invoice states the legal ground, credit notes keep the same treatment, and Reports gives you the breakdown by destination for box 60 of the Modelo 303. If Shopify charges VAT on those orders, the sale is treated as a normal taxed sale.

€0 orders

By default, €0 orders (100% coupon, free digital products, gifts) are not invoiced or sent to the AEAT. You can enable invoicing them if your advisor requires it.

Equivalence surcharge

If your tax regime (in Issuer details) is equivalence surcharge, or a sale includes the surcharge, the invoice reflects it with its corresponding line. Remember that the surcharge requires identifying the buyer, so the sale must be a full invoice (F1) with a tax ID (see section 4).

Automatically emailing the invoice to the customer

The "Automatically email the invoice to the customer" checkbox is on by default. If you turn it off, invoices are still issued (and sent to the AEAT when applicable) but are not emailed; you can still send any invoice manually from its detail page or from POS. In active mode, the email is sent once the AEAT accepts the invoice.

In the invoice list, next to the customer's name there's an email icon: green if that invoice has been sent and grey if not. Hover to see the sending date.

Email sender

By default, emails to your customers are sent from verifactupro@idnovate.com under your business name, and if the customer replies, the reply reaches you. In Settings → Emails to your customers you can change the sender name (e.g. your shop's name instead of your legal name) or send them from your own mail server (SMTP), with your address and your domain's authentication. When you save, the app checks it can connect, and “Send test email” lets you see the result in your inbox. If your server fails to send an invoice, it is sent from ours so your customer still gets it, and the error shows up in Settings.

Email alerts (for you)

  • AEAT rejection: get an alert the moment the AEAT rejects a record, so you can fix the data and resend. On by default; uses the store email or the addresses you specify.
  • Invoice held for the tax ID: get an alert when an invoice is held because the buyer's tax ID is missing or the one typed isn't valid (see section 4).
  • VAT number not valid in VIES: get an alert if an exempt intra-Community sale carries a VAT number VIES doesn't recognise (see "Sales to businesses in other EU countries").

All three alerts go to the same recipients, set in Settings → Verifactu.

8. Customizing your invoices

  • Invoice designer: a visual drag-and-drop editor to place your logo, details and blocks. The accent colour is the colour of the TOTAL (label and amount) and of the VERI*FACTU legend under the QR. The app validates that the invoice stays legally compliant before saving.
  • Income-tax withholding (IRPF): if you're a freelancer with withholding, enable it in Settings; the withholding line and "amount to collect" appear on the PDF.
  • Multi-language invoice footer: in the designer you can write a footer text for each language your store publishes.
  • Buyer's language: the PDF and email are produced in the customer's language (Spanish, English, French, Italian, German or Portuguese). Any other language gets Spanish, except non-Latin scripts (Chinese, Arabic…), which get English.

For numbering and series, see section 6.

9. Invoicing past orders

(Pro feature.) The app only auto-invoices orders paid after it was installed. If you need to issue invoices for earlier orders (for example, from your self-employment start date), use "Past orders" in the menu (or the "Invoice past orders" button in the invoice list). As it's a bulk task that needs unlimited invoices, it's available on the Pro plan (with a 7-day trial).

  1. Choose the start date (only orders paid on/after that date are considered).
  2. Click "Check orders" to review how many orders will be invoiced and a sample.
  3. Decide whether to email each invoice to its customer (off by default: these are past orders).
  4. Confirm: the app invoices them in the background, oldest first, and shows the progress. You can close the page or stop it at any time.

Returns those orders already had are reflected automatically with their corrective invoice. Cancelled or fully refunded orders are skipped.

Free plan: includes up to 10 invoices a month. Orders beyond that limit are left without an invoice (the dashboard warns you) and aren't invoiced automatically when you upgrade to Pro: the dashboard shows how many there are and an "Invoice them now" button that opens "Past orders" with the date already set.
While it runs, new orders are put on hold and invoiced when it finishes, so the numbering of the period stays contiguous (at the POS their receipt shows as "generating" until then). It is best to run it outside shop hours. It processes roughly 1,500–2,000 orders per hour.

10. Backups and retention (custody)

As the taxpayer, you must keep your invoices for the legal period (6 years under the Commercial Code; 4 years tax limitation). Verifactu Pro makes it easy with automatic custody backups (Pro plan), configured once in Export & retention:

  • Scheduled email backup: you receive a ZIP with your invoices (PDF + XML + index) at the frequency you choose (daily, weekly or monthly). If it's over 10 MB, you get a secure download link.
  • Real-time copy to SFTP: each invoice is copied to your server as soon as it's issued.
  • Copy to your Dropbox: using your own Dropbox app (your credentials, encrypted). Files stay only in your account.
  • Copy to your Google Drive: using your own Google account; the app creates a "Verifactu" folder and copies each invoice there.

Backups include both standard and corrective invoices. In the invoice list you'll see an indicator per destination (SFTP, Dropbox, Drive) showing where each invoice landed, plus a button to retry any that are missing or failed.

Important: before uninstalling the app, export all your invoices from the Export section. After uninstalling we keep your data for a while, but the custody copy is your responsibility.

11. Reports and invoice ledger

The Reports section (Pro plan) gives you a summary of output VAT per quarter and an annual breakdown by VAT rate, handy for your accountant and the 303/390 forms. You can download the issued-invoices ledger as CSV (Excel-compatible), filtered by year or quarter, in two formats: the standard one and one broken down by VAT rate in rows. If you sell through the One Stop Shop, there is also the OSS report for the Modelo 369 (summary by country and rate, or detail by document); those sales are not added to Spanish VAT. If you make VAT-free sales to EU businesses or outside the EU, there are also the intra-Community operations report for the Modelo 349 (with the VIES check of each VAT number) and the exports report for box 60 of the 303.

Quarters and years follow the operation date (when VAT falls due), not the invoice date. If you invoice days after the order or on shipment, an order of 30 September invoiced on 6 October counts in Q3, and one of 30 December invoiced in January counts in the order's year, even though its number is already from the new year. So download a quarter's ledger once its last invoices are out. If a quarter includes invoices issued after the 303 deadline, the report says so. Exception: intra-Community supplies (Modelo 349) follow the invoice date, because their VAT falls due when the invoice is issued.

12. Invoice portal for your customers

Your customers can view and download their own invoices (Pro plan):

  • An "Invoices" entry appears in the customer's account menu, next to Orders and Profile.
  • Each customer only sees their invoices and can download the PDF.

This cuts down "please send me my invoice" requests to your support.

13. Compliance and responsible declaration

The Compliance tab inside the app contains a technical conformity report (requirement by requirement of RD 1007/2023 and Order HAC/1177/2024), the identification of the system and of your installation (with your installation number) and the system producer's responsible declaration (art. 15 of Order HAC/1177/2024).

The responsible declaration is also published, for every version of the system, at bridge.idnovate.com/idn-verifactu/declaracion-responsable (in Spanish, as a legal document); you can print it or save it as PDF for your records.

In NO VERI*FACTU mode, the Event log section shows your installation's signed, chained events, lets you check the records' integrity at any time and download the events as XML.

14. Facturae for public administrations (B2G)

If you sell to a public administration, you can generate the signed Facturae 3.2.2 file (.xsig) from the invoice detail, entering the body's details and its DIR3 codes. Enable it in Settings.

15. In-store sales (Shopify POS)

If you sell with Shopify POS (a physical counter), Verifactu Pro issues the same Verifactu invoice for every paid sale and lets you hand the receipt to the customer at the counter, with its tax QR code and hash. For tax purposes that receipt is a simplified invoice (F2): a valid document, just in 80 mm receipt format.

How to enable it

The action ships with the app but must be activated once, from the Shopify admin: Sales channels → Point of Sale → Customize the in-store experience → Edit Point of Sale, tap the Apps icon, turn on Verifactu Pro for your locations and save. "Ticket Verifactu" then appears on the post-sale screen and on every order's detail, next to "Receipt".

  • Staff permissions: if you use POS roles, the cashier's role needs the "Use apps that work with Shopify POS" permission; without it the action doesn't show.
  • Home-screen tile (optional): in POS, Add tile → Embedded apps → Verifactu Pro. It opens the latest documents issued.

How to use it

Right after charging (or from any order's detail) tap "Ticket Verifactu". A screen opens with three ways to deliver the receipt:

  • Send by email: if the order has a customer, the email is pre-filled; otherwise you type it. The customer gets the receipt as a PDF with the QR.
  • Show QR on screen: the customer scans it straight from the terminal to verify their invoice with the AEAT.
  • Print receipt: by default it prints on the receipt printer connected to Shopify POS, the same as Shopify's receipt, with nothing to set up (with several printers, the terminal lets you choose). If you prefer a network printer, set it up in Settings (see below). With no printer at all, the device's print dialog opens (AirPrint on iOS).

"Billing details": if the customer asks for an invoice after paying, tap this button on the same screen and fill in the name or company name, tax ID and address. The app issues a full invoice that replaces the receipt and the screen switches to it, ready to email (as A4), show the QR or print. The tax ID is saved on the customer for their next purchases.

In-store exchanges: the "Exchange receipt"

An exchange (the customer returns an item and takes another) produces two documents, as the law requires: a credit note for what comes back and an invoice for what they take. Opening "Ticket Verifactu" on that order goes straight to the Exchange receipt: one paper (or one PDF by email) with both documents, each complete with its tax QR, and the difference to pay or to refund at the end. From "Documents for this order" you can still hand out either one on its own.

Ticket footer text

At the bottom of the Designer, the "POS ticket" section takes one text per language, printed at the end of every ticket (sales, credit notes and exchanges): e.g. your data-protection clause or the complaint-forms notice. It is separate from the A4 invoice's free text.

Network printer (optional)

If you want the ticket to always print on a network receipt printer, from any terminal, choose it in Settings → "Receipt printing in Shopify POS" → "Where the Verifactu ticket prints". It supports Star (CloudPRNT) and Epson (Server Direct Print): paste the URL the app gives you into the printer's configuration and you're done. The printer polls the app and receives the receipt as an 80 mm (or 58 mm) image.

Customer, tax ID and invoice type

  • Sale with no customer (counter) → simplified invoice (F2) under "Cash sale".
  • Sale with a customer who has a valid tax ID → full invoice (F1) with their details, still delivered as a receipt.
  • In both cases the full A4 invoice stays available under Invoices in case the customer asks for it.
The invoice is only issued once the order is fully paid. If you mark the sale as unpaid or partially paid, the receipt screen shows "Order awaiting payment": charge the sale and tap "Retry". The POS screen is shown in the terminal's language (Spanish, English, French, Italian, German, Polish or Portuguese).

16. Support

Questions or issues? Email us at info@idnovate.com. For specific tax matters (VAT forms, withholding, edge cases) always consult your tax advisor.

Verifactu Pro · Verifactu-compliant e-invoicing (RD 1007/2023). This guide is informational; for your specific tax situation consult your advisor.