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

# n8n

<div style={{ display: "flex", gap: "1.75rem", alignItems: "flex-start", marginTop: "0.5rem", marginBottom: "1.75rem" }}>
  <img src="https://mintcdn.com/frontic/zwqcoY8MRIYLLSYv/images/connectors/n8n.svg?fit=max&auto=format&n=zwqcoY8MRIYLLSYv&q=85&s=6951fbf220ce969c4d6a9fb8a16f3baa" alt="n8n" style={{ height: "56px", width: "auto", flexShrink: 0, marginTop: "0.25rem" }} width="24" height="24" data-path="images/connectors/n8n.svg" />

  <div>
    There's no dedicated n8n connector — instead, n8n becomes a Frontic source by pushing records into a [Custom integration](/connectors/custom) via the [Ingest API](/reference/ingest-api). Use this when n8n is already orchestrating data between systems and you want to push enriched records to Frontic and no other connector is available.
  </div>
</div>

<div style={{ display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: "0.75rem", marginBottom: "2rem" }}>
  <div style={{ padding: "0.75rem 1rem", border: "1px solid var(--card-border, rgba(0,0,0,0.08))", borderRadius: "0.625rem" }}>
    <div style={{ display: "flex", alignItems: "center", gap: "0.5rem", fontSize: "0.75rem", textTransform: "uppercase", letterSpacing: "0.04em", opacity: 0.6, marginBottom: "0.25rem" }}>
      <Icon icon="key" iconType="solid" /> Auth
    </div>

    <div style={{ fontSize: "0.875rem", fontWeight: 500 }}>Ingest API token</div>
  </div>

  <div style={{ padding: "0.75rem 1rem", border: "1px solid var(--card-border, rgba(0,0,0,0.08))", borderRadius: "0.625rem" }}>
    <div style={{ display: "flex", alignItems: "center", gap: "0.5rem", fontSize: "0.75rem", textTransform: "uppercase", letterSpacing: "0.04em", opacity: 0.6, marginBottom: "0.25rem" }}>
      <Icon icon="arrows-rotate" iconType="solid" /> Update method
    </div>

    <div style={{ fontSize: "0.875rem", fontWeight: 500 }}>Ingest API (push from n8n)</div>
  </div>

  <div style={{ padding: "0.75rem 1rem", border: "1px solid var(--card-border, rgba(0,0,0,0.08))", borderRadius: "0.625rem" }}>
    <div style={{ display: "flex", alignItems: "center", gap: "0.5rem", fontSize: "0.75rem", textTransform: "uppercase", letterSpacing: "0.04em", opacity: 0.6, marginBottom: "0.25rem" }}>
      <Icon icon="boxes-stacked" iconType="solid" /> Resources
    </div>

    <div style={{ fontSize: "0.875rem", fontWeight: 500 }}>Anything you push</div>
  </div>
</div>

## When to reach for n8n

Use this pattern when:

* You already run n8n to orchestrate data flow between systems and want Frontic to receive the enriched output.
* The source you want to ingest from doesn't have a first-party Frontic connector and you'd rather configure n8n than write code.
* You need a transformation step (deduplication, enrichment from another API, scheduled aggregation) before records get pushed to Frontic.

If your source is a system Frontic already connects to (Shopware, Shopify, Akeneo, …), use that connector directly — there's no advantage to routing through n8n.

## How it works

<Steps>
  <Step title="Set up a Custom integration in Frontic" icon="plug">
    Create a [Custom integration](/connectors/custom) and add a Data Feed for the resource type you'll push. Note the feed's Ingest API endpoint and create an Ingest API token — see [Ingest API → Auth](/reference/ingest-api/upsert).
  </Step>

  <Step title="Build the n8n workflow" icon="diagram-project">
    In n8n, build a workflow that produces records in the [Custom integration's payload shape](/connectors/custom#general-record-structure). Trigger it on a schedule, on webhook, or from any other n8n trigger node.
  </Step>

  <Step title="Add an HTTP Request node" icon="upload">
    Use the **Frontic Ingest API** node in n8n to POST to the Frontic Ingest API endpoint. Set:

    * **Ingest Operation**: `Create or Update` for adding data, `Delete` for removing records
    * **Frontic Ingest API Credentials**: Choose your configured Frontic credentials form n8n
    * **Payload**: For adding data, use the record JSON (or an array of records for bulk upsert). For removing records, pass an object with the record's ID (or an array of ID objects for bulk removal).
  </Step>

  <Step title="Test and deploy" icon="check">
    Run the workflow once to confirm records land in your Frontic feed, then activate it. From here on, every n8n run pushes its output into Frontic.
  </Step>
</Steps>

## What the data looks like

You define the record structure in n8n. Match the [Custom integration's record structure conventions](/connectors/custom#general-record-structure) — the connector recognises `@channel`, `@translation`, and `@currency` annotations for context-specific values.

## Good to know

* **You own the schema.** No normalization happens on the connector side — what you push is what's stored on the feed (reshaping into your storage schema is the Data Sync's job).
* **No webhooks back to n8n.** This is a one-way push from n8n into Frontic. If you need Frontic to notify n8n of stack changes, use a separate webhook source on the n8n side.
* **Quota counting.** Every push from n8n counts against your **API Updates** quota the same as any other Ingest API call. Schedule deliberately.

## Related

<CardGroup cols={2}>
  <Card title="Custom Integration" icon="paintbrush-fine" href="/connectors/custom">
    The Frontic-side configuration n8n posts to.
  </Card>

  <Card title="Ingest API" icon="upload" href="/reference/ingest-api">
    The HTTP endpoints, payload shape, and auth model.
  </Card>
</CardGroup>
