{"id":12648,"date":"2026-08-24T09:01:36","date_gmt":"2026-08-24T07:01:36","guid":{"rendered":"https:\/\/consultoriaehero.com\/?p=12648"},"modified":"2026-08-24T09:01:36","modified_gmt":"2026-08-24T07:01:36","slug":"model-349-which-transactions-are-reported-and-how-to-extract-them-from-woocommerce","status":"publish","type":"post","link":"https:\/\/consultoriaehero.com\/en\/model-349-which-transactions-are-reported-and-how-to-extract-them-from-woocommerce\/","title":{"rendered":"Model 349: which transactions are reported and how to extract them from WooCommerce"},"content":{"rendered":"<p><strong>Model 349<\/strong> is the information return that records intra-EU transactions: what you have sold to businesses in other EU countries with VAT exemption and what you have bought from EU suppliers. It does not pay anything, but it must match: the tax office cross-checks your 349 with those of your European customers and suppliers, and if they do not match, a formal request arrives. This explains what is reported and how to extract it from WooCommerce without rebuilding it manually.<\/p>\n<nav class=\"w2g-toc\"><strong>On this page<\/strong><\/p>\n<ol>\n<li><a href=\"#que-se-declara\">Which transactions are reported in 349<\/a><\/li>\n<li><a href=\"#plazos\">Deadlines and frequency<\/a><\/li>\n<li><a href=\"#datos\">The data you need from each transaction<\/a><\/li>\n<li><a href=\"#woocommerce\">How to extract it from WooCommerce<\/a><\/li>\n<li><a href=\"#fallos\">The mistakes that trigger requests<\/a><\/li>\n<li><a href=\"#claves\">The transaction codes<\/a><\/li>\n<li><a href=\"#rectificaciones\">Corrections<\/a><\/li>\n<li><a href=\"#cruce\">Why the tax office cross-checks it<\/a><\/li>\n<\/ol>\n<\/nav>\n<h2 id=\"que-se-declara\">Which transactions are reported in 349<\/h2>\n<p><strong>Intra-EU supplies and acquisitions<\/strong> of goods and services between registered operators are reported. In an online store, in practice:<\/p>\n<ul>\n<li><strong>VAT-exempt supplies to EU businesses<\/strong>: each sale where you applied <em>reverse charge<\/em> because the customer had a valid VAT ID.<\/li>\n<li><strong>Acquisitions from EU suppliers<\/strong>: what you buy from wholesalers in other EU countries, very common in dropshipping.<\/li>\n<\/ul>\n<p>Sales to private individuals are not reported \u2014 those go through OSS \u2014 nor are domestic transactions or those outside the EU.<\/p>\n<p>The key word is <em>exempt<\/em>: if a sale to a European business included VAT because you did not validate the VAT ID, that transaction is not intra-EU for 349 purposes and should not appear. The reverse is also true: if you applied the exemption, it has to be included.<\/p>\n<h2 id=\"plazos\">Deadlines and frequency<\/h2>\n<p>The frequency depends on the volume of intra-EU transactions. In a small or medium-sized store, the usual filing frequency is quarterly, within the first twenty calendar days of the month following the quarter. Once certain thresholds are exceeded, it becomes monthly.<\/p>\n<p>The specific thresholds and deadlines are set by the tax authority and should be confirmed with your advisor each year, because they change.<\/p>\n<h2 id=\"datos\">The data you need from each transaction<\/h2>\n<p>For each counterparty, you must report the VAT ID with its country prefix, the name, the transaction code, and the total amount for the period. In other words: <strong>it is not transaction by transaction, but aggregated by customer and by type of transaction<\/strong>.<\/p>\n<p>That means you need, for each exempt order, three things: the exact VAT ID as validated, the country, and the base amount. If the VAT ID was saved with a typo or was not saved at all, that transaction cannot be reported correctly.<\/p>\n<h3>Why the validation log matters here<\/h3>\n<p>When a discrepancy arises, the question is not how much you sold: it is why you considered that transaction exempt. A record saying \u201con March 14, VIES was checked for this VAT ID and returned valid, company X\u201d settles the discussion. Without that record, the exemption is just your claim.<\/p>\n<h2 id=\"woocommerce\">How to extract it from WooCommerce<\/h2>\n<p>WooCommerce stores orders, not tax criteria. Extracting 349 from the order list means filtering those sent to another EU country, distinguishing business from private customer, checking that each one was exempt, and grouping by VAT ID. Manually, every quarter.<\/p>\n<p><a href=\"https:\/\/consultoriaehero.com\/en\/product\/ehero-woo-vat-eu-vat-control-vies-and-intra-community-exemption-for-woocommerce\/\">EHERO Woo VAT<\/a> generates the draft with those data already grouped by counterparty, because it has been recording them in each order. Your advisor reviews and files it; they do not rebuild it.<\/p>\n<p>If you also handle invoicing in Holded, the amounts should match between the store and the ERP: that is what <a href=\"https:\/\/consultoriaehero.com\/en\/product\/ehero-woo-holded-complete-holded-woocommerce-integration\/\">EHERO Woo Holded<\/a> is for.<\/p>\n<h2 id=\"fallos\">The mistakes that trigger requests<\/h2>\n<p><strong>Reporting a transaction that the customer did not report.<\/strong> This usually means the VAT ID was not actually registered as an intra-EU operator. Validating against VIES at the time of sale prevents this.<\/p>\n<p><strong>VAT ID copied incorrectly.<\/strong> One extra digit or forgetting the country prefix and the transaction does not match. Saving the VAT ID exactly as validated removes the problem.<\/p>\n<p><strong>Forgetting acquisitions.<\/strong> If you buy from a European wholesaler, those purchases also go in 349. This is the most common omission in dropshipping stores.<\/p>\n<h2 id=\"claves\">The transaction codes<\/h2>\n<p>Each line in 349 has a code that identifies the type of transaction. The ones that appear in an online store are basically:<\/p>\n<ul>\n<li><strong>E \u2014 Intra-EU supplies<\/strong>: your VAT-exempt sales to EU businesses.<\/li>\n<li><strong>A \u2014 Intra-EU acquisitions<\/strong>: your purchases from EU suppliers.<\/li>\n<li><strong>S \u2014 Services supplied<\/strong> intra-EU.<\/li>\n<li><strong>I \u2014 Intra-EU acquisitions of services<\/strong>: this includes everyday things like your hosting or advertising supplier\u2019s invoice if they are in another EU country.<\/li>\n<\/ul>\n<p>That last one is the one most often forgotten in small stores: digital services you contract from European companies are also intra-EU transactions and must be reported. The full list of codes and the cases for each one are in the <a href=\"https:\/\/sede.agenciatributaria.gob.es\/Sede\/procedimientoini\/GI29.shtml\" target=\"_blank\" rel=\"noopener\">Spanish tax agency\u2019s 349 form page<\/a>.<\/p>\n<h2 id=\"rectificaciones\">Corrections: what to do when something changes<\/h2>\n<p>If in a later quarter you return goods, cancel a sale, or discover that an amount was wrong, you do not correct the old 349: you report the correction in the period when it becomes known, identifying the period it relates to.<\/p>\n<p>For a store, this means returns of intra-EU orders must be traceable. If the original order is recorded as exempt and is later refunded, that movement has to reach the return.<\/p>\n<h2 id=\"cruce\">Why the tax office cross-checks it and what it sees<\/h2>\n<p>349 is informational: nothing is paid when it is filed. Its purpose is to allow cross-checking with the VIES system at European level. Your German customer reports the intra-EU acquisition they bought from you; you report the supply. If the two amounts do not match, the discrepancy is flagged.<\/p>\n<p>The most common discrepancies are not fraud: they are timing differences \u2014 you report it in the quarter of the order and your customer in the quarter of receipt \u2014 or a misspelled VAT ID. Both are resolved with documentation, and the documentation starts with the validation record.<\/p>\n<div class=\"wp-block-group has-background\" style=\"background-color:#f0f7ff;padding:22px 26px;border-radius:12px;border-left:4px solid #017cba\">\n<p><strong>349 only works if the data is there from the start<\/strong><\/p>\n<p>EHERO Woo VAT records each VIES validation and groups transactions by counterparty, so the 349 draft is generated with the real data from each order.<\/p>\n<p><a href=\"https:\/\/consultoriaehero.com\/en\/product\/ehero-woo-vat-eu-vat-control-vies-and-intra-community-exemption-for-woocommerce\/\">See EHERO Woo VAT<\/a> \u00b7 <a href=\"https:\/\/consultoriaehero.com\/en\/intra-community-vat-in-woocommerce\/\">Complete guide to intra-EU VAT<\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Model 349 is the information return that records intra-EU transactions: what you have sold to businesses in other EU countries with VAT exemption and what you have bought from EU suppliers. It does not pay anything, but it must match: the tax office cross-checks your 349 with those of your European customers and suppliers, and [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":11487,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jf_save_progress":"","rank_math_focus_keyword":"modelo 349,modelo 349 WooCommerce,operaciones intracomunitarias,declaraci\u00f3n recapitulativa 349","rank_math_title":"Model 349 in WooCommerce: what is declared | EHERO","rank_math_description":"Which intra-EU transactions go in form 349, what data you need for each one, and how to generate the draft from WooCommerce without doing it manually again.","rank_math_robots":[],"rank_math_canonical_url":"","rank_math_seo_score":89,"footnotes":""},"categories":[825,34],"tags":[],"class_list":["post-12648","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-e-commerce-en","category-marketing-digital"],"acf":[],"_links":{"self":[{"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/posts\/12648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/comments?post=12648"}],"version-history":[{"count":1,"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/posts\/12648\/revisions"}],"predecessor-version":[{"id":12649,"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/posts\/12648\/revisions\/12649"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/media\/11487"}],"wp:attachment":[{"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/media?parent=12648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/categories?post=12648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/consultoriaehero.com\/wp-json\/wp\/v2\/tags?post=12648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}