Resolución N° 5.616/2024. Más información

Facturar ventas de Shopify con ARCA en n8n

Guía para emitir facturas electrónicas de ARCA desde órdenes pagadas de Shopify usando n8n, Afip SDK y un flujo de actualización de metacampos o tags.


Facturar ventas de Shopify con ARCA en n8n

Descargá el workflow shopify-arca-invoice.json para importarlo en n8n y adaptarlo a tu cuenta de Shopify.


Shopify sí tiene una API y Webhooks suficientemente claros para automatizar la facturación. El flujo recomendado es escuchar orders/paid, consultar la orden completa con Admin API, emitir con Afip SDK y escribir el resultado en tags, order metafields o notas internas.

Documentación útil:

Cómo funciona la integración

  1. Shopify dispara un Webhook orders/paid.
  2. n8n recibe el payload en un nodo Webhook.
  3. n8n verifica que la orden no tenga factura emitida.
  4. n8n consulta la orden completa con Admin API.
  5. n8n toma CUIT/DNI desde metafields, cart attributes, note attributes o customer metafields.
  6. Afip SDK autoriza el comprobante en ARCA.
  7. n8n guarda CAE, número de factura y PDF en Shopify.

Paso 1: crear el Webhook orders/paid

Desde una app privada/custom app o desde la configuración de Webhooks, creá una suscripción para orders/paid.

En n8n:

  • Nodo Webhook.
  • Método POST.
  • Path, por ejemplo: /shopify/orders-paid.
  • Respondé 200 rápido y procesá la factura después si el volumen es alto.

Shopify puede reenviar Webhooks, así que el workflow debe ser idempotente.

Paso 2: consultar la orden completa

Aunque el Webhook trae datos de la orden, conviene consultar la Admin API para trabajar con el estado actual:

GET https://{shop}.myshopify.com/admin/api/2026-01/orders/{{ $json.id }}.json
X-Shopify-Access-Token: {{ $env.SHOPIFY_ACCESS_TOKEN }}

Pedí o persistí estos campos:

  • id y order_number.
  • financial_status.
  • line_items.
  • shipping_lines.
  • discount_codes.
  • total_tax, total_price, subtotal_price.
  • billing_address.
  • note_attributes.

Paso 3: dónde guardar CUIT y condición fiscal

Shopify no trae CUIT argentino como campo nativo de checkout para todos los casos. Tenés que definir un lugar estable:

  • note_attributes del checkout.
  • Order metafields.
  • Customer metafields.
  • Una app de checkout que capture tax_id, razón social y condición fiscal.

En n8n, agregá un nodo Code que busque el CUIT en esos lugares en orden de prioridad:

const order = $json.order;

const noteAttributes = Object.fromEntries(
  (order.note_attributes || []).map((attr) => [attr.name, attr.value])
);

const taxId = noteAttributes.cuit || noteAttributes.tax_id || order.customer?.tax_exemptions?.[0];

return [{
  json: {
    shopifyOrderId: order.id,
    orderNumber: order.order_number,
    taxId,
    customerName: order.billing_address?.company || `${order.billing_address?.first_name || ''} ${order.billing_address?.last_name || ''}`.trim(),
    email: order.email,
  },
}];

Si taxId falta, no emitas la factura todavía. Etiquetá la orden como facturacion-pendiente-datos o notificá al equipo.

Paso 4: mapear items, descuentos y envío

Shopify separa:

  • Productos en line_items.
  • Envíos en shipping_lines.
  • Descuentos en discount_codes o allocations.
  • Impuestos en campos de tax.

Antes de llamar a ARCA, consolidá esos importes. Si tu tienda carga precios con IVA incluido, el nodo Code debe separar neto e IVA según la alícuota del producto.

Ejemplo de estructura intermedia:

return [{
  json: {
    externalId: `shopify:${order.id}`,
    pointOfSale: 1,
    voucherType: taxId ? 1 : 6,
    documentType: taxId ? 80 : 99,
    documentNumber: taxId || 0,
    netAmount,
    vatAmount,
    totalAmount: Number(order.total_price),
    items,
  },
}];

Paso 5: emitir con Afip SDK

Usá los nodos de Afip SDK:

  1. Get authorization token para wsfe.
  2. Execute web service request con FECompUltimoAutorizado.
  3. Execute web service request con FECAESolicitar.
  4. Nodo para generar el PDF con el template de Afip SDK.

El idempotency key debe ser shopify:{order.id}. Antes de emitir, buscá si ya existe un metafield arca.invoice_number.

Paso 6: escribir el resultado en Shopify

Tenés tres opciones prácticas:

  • Agregar tag: facturada-arca.
  • Crear order metafields: arca.cae, arca.invoice_number, arca.pdf_url.
  • Agregar una nota interna con el comprobante.

Para un flujo limpio, usá metafields para datos estructurados y tags para operación diaria.

Errores comunes

  • Facturar orders/create en vez de orders/paid.
  • No capturar CUIT en checkout.
  • Usar el email como dato fiscal.
  • No contemplar refunds: una devolución en Shopify no es automáticamente una nota de crédito en ARCA.
  • Duplicar facturas por reintentos de Webhook.

Cierre

Shopify funciona muy bien con n8n porque el evento orders/paid es claro y la Admin API permite completar la información. La clave es sumar campos fiscales argentinos y guardar el resultado de ARCA en la orden.

Conéctate a ARCA hoy mismo

Evitá la complejidad de ARCA. Con Afip SDK integrás tu sistema en minutos y te enfocás en hacer crecer tu negocio.