HomeShopify & E-commerceShopify orders to a Notion database…

Shopify orders to a Notion database with n8n

Shopify orders to a Notion database with n8n









Sending Shopify orders to a Notion database with n8n turns your storefront into a live order log your whole team can read, filter, and annotate, without anyone opening the Shopify admin. Each new order becomes a Notion page with the order number, customer, total, and status, ready for a kanban board, a fulfillment checklist, or a revenue rollup. This guide builds that sync in three n8n nodes: a Shopify webhook trigger, a step that maps the order fields, and a Notion create-page step.

What it does

Notion is where a lot of small teams already plan work. If your operations live in Notion, then an order sitting only in Shopify is an order your team has to leave Notion to see. Copying orders across by hand is tedious and it goes stale within minutes on a busy day.

This workflow keeps Notion current on its own. It listens for every new order through a Shopify webhook, maps the fields you care about, and creates a page in your Notion orders database. Because it is a real database, you can then flip it to a board grouped by fulfillment status, a calendar by order date, or a table filtered to unpaid orders. A row looks like this:

Order:            #1042
Customer:         Emily Rodriguez
Email:            emily.rodriguez@gmail.com
Total:            148.00
Financial status: paid
Fulfillment:      unfulfilled
Items:            3
Order date:       2026-09-01T14:30:00-04:00

Every order lands the moment it is placed, so the board your team works from is always up to date.

Why it beats the default

The manual default is exporting a Shopify CSV and pasting it into Notion, or retyping orders one by one. Both go out of date immediately and both invite typos. Shopify’s own order views are fine, but they do not live where your team plans work, and you cannot layer Notion features like a board, a checklist, or a formula on top of them.

A synced Notion database gives you Shopify’s data with Notion’s flexibility. Group orders into a fulfillment board, assign a teammate to each page, add packing notes, or build a rollup that totals today’s revenue. Compared with Shopify Flow, which is limited to Shopify Plus and cannot write to Notion, n8n does the sync on any plan and leaves room to grow into a two-way status update later.

It is also the same logging pattern that already works with Google Sheets and Airtable, just pointed at Notion. If your planning happens in Notion, this puts the order feed exactly where you will act on it.

What you need

  • A Shopify store on any plan, with an admin login that can create a custom app.
  • An n8n instance, either n8n Cloud or self-hosted (version 1.0 or newer).
  • A Shopify Admin API access token, created through the 2026 Shopify Dev Dashboard method. New to connecting the two? Follow connect Shopify to n8n (2026 guide) first.
  • A Notion workspace with an internal integration token, and an orders database shared with that integration.

Build time is about 20 minutes from scratch, or a couple of minutes if you import the ready-made template below and add your credentials and database id.

Node-by-node list

Three nodes, in a straight line. Here is each one and what it does.

# Node Type Job
1 New Shopify order shopifyTrigger Fires on the orders/create webhook for every new order and passes the full order payload downstream.
2 Map order fields set Flattens the order into clean fields: order number, customer, email, total as a number, statuses, item count, and date.
3 Create Notion page notion Creates a page in your Notion orders database, filling each property from the mapped fields.

The Notion database

Create a Notion database first, because the property names and types in n8n must match it exactly. This template writes to these properties.

Property Notion type Example
Order Title #1042
Customer Text Emily Rodriguez
Email Text emily.rodriguez@gmail.com
Financial status Text paid
Fulfillment status Text unfulfilled
Total Number 148.00
Items Number 3
Order date Text 2026-09-01T14:30:00-04:00
📌

Note: property names are case-sensitive and must match the template exactly. Total and Items are Number properties so Notion can sum and sort them. If you prefer a true date column or a status dropdown, change those properties to Date or Select in Notion and switch the matching node fields to the same type.

How it works

  [New Shopify order]  (orders/create webhook)
          |
          v
  [Map order fields]  (order #, customer, total number, statuses, date)
          |
          v
  [Create Notion page]  (new row in your orders database)
  

Step-by-step build

  1. Create a new workflow in n8n and name it “Shopify orders to Notion.”
  2. Add a Shopify Trigger node. Set Authentication to Access Token and attach your Shopify Admin API credential. Set the Topic to orders/create. When you activate the workflow later, n8n registers this webhook in your store for you.
  3. In Notion, create the orders database with the eight properties in the table above. Then create an internal integration (Settings, then Connections, then manage integrations), copy its token, open the database’s three-dot menu, choose Connections, and add the integration so it can write there.
  4. Back in n8n, add a Set (Edit Fields) node named “Map order fields” and connect the trigger to it. Add these assignments: orderName = {{ $json.name }}, customerName = {{ $json.customer ? $json.customer.first_name + ' ' + $json.customer.last_name : 'Guest checkout' }}, email = {{ $json.email || ($json.customer ? $json.customer.email : '') }}, financialStatus = {{ $json.financial_status || 'pending' }}, fulfillmentStatus = {{ $json.fulfillment_status || 'unfulfilled' }}, total (number) = {{ $json.total_price }}, itemCount (number) = {{ $json.line_items ? $json.line_items.length : 0 }}, and createdAt = {{ $json.created_at }}. Setting total to the Number type converts Shopify’s string price into a real number for Notion.
  5. Add a Notion node named “Create Notion page” after the Set node. Resource Database Page, Operation Create. For Database, pick your orders database (or paste its id). Then add one property value per column: map Order (title) to {{ $json.orderName }}, Customer to {{ $json.customerName }}, Email to {{ $json.email }}, Financial status to {{ $json.financialStatus }}, Fulfillment status to {{ $json.fulfillmentStatus }}, Total (number) to {{ $json.total }}, Items (number) to {{ $json.itemCount }}, and Order date to {{ $json.createdAt }}.
  6. Save, then toggle the workflow to Active so the webhook registers. Place a test order and confirm a new page appears in your Notion database with every field filled.
💡

Tip: want to avoid any chance of a duplicate row when Shopify retries a webhook? Add a Notion “Get Many” (search) step before the create, filtered to the order number, and an IF that only creates the page when none is found. Store the order number in a text property so that lookup has a reliable key.

Common mistakes

  • Property names that do not match. Notion property keys are case-sensitive. If the node says Total and your database column is total, the value silently goes nowhere. Copy names exactly.
  • Forgetting to share the database with the integration. A fresh integration token can see nothing until you add it to the database through the Connections menu. Without that, the create step returns a permissions error.
  • Storing the total as text. If Total is a Text property, Notion cannot sum or sort it. Keep it a Number property and keep the mapping step’s Number type so revenue math works.
  • Leaving the workflow inactive. The orders/create webhook only exists while the workflow is Active. No pages appearing usually means the Active toggle is off.
  • Expecting a missing customer to always be present. Guest checkouts can arrive without a customer object, so the mapping falls back to “Guest checkout” and the store customer email, which keeps the page from failing.

Cost at realistic volume

This workflow runs inside free tiers at normal store volume. The Notion API is free on every plan, and an order log is well within workspace block limits. The Shopify Admin API is included with your plan, and the webhook costs nothing on the Shopify side.

On n8n, each order runs three quick steps. A store doing 800 orders a month runs about 800 short executions, which sits inside n8n Cloud’s entry plans and is free on self-hosted n8n. The practical payoff is a Notion order board that is always current, replacing the CSV export and paste that would otherwise eat time every day.

Download the ready-to-import template

The guide above is free to follow, and building it by hand takes about 20 minutes. The template is the same validated workflow as a single .json import, so you skip the build and just add your credentials and database id. Prefer it done for you? Our done-for-you setup service installs and tests it on your instance.

Download the template ($12) →

Instant download · Works on n8n Cloud and self-hosted

FAQ

Do I need a paid Notion plan for this?

No. A free Notion plan handles this, and the Notion API integration is free on every plan. You create one internal integration, share your orders database with it, and n8n uses that token to add pages. The only real limit is the number of blocks in a workspace, which an order log will not reach for a very long time.

How do I connect Notion to n8n?

In Notion, open Settings, then Connections, then Develop or manage integrations, and create a new internal integration to get a token. Paste that token into a Notion credential in n8n. Then open your orders database, click the three-dot menu, choose Connections, and add your integration so it can write to that database.

Will it create duplicate rows if Shopify retries the webhook?

Shopify can retry a webhook if it does not get a fast response, which could create a second row. To be safe, store the Shopify order id in a text property and, before creating, search the database for that id and skip if it already exists. The template keeps the base flow simple, and the guide shows where to add that check.

Can I update the Notion page when the order ships?

Yes. Build a second small workflow on the orders/fulfilled webhook that searches the database for the order and uses the Notion Update operation to set the fulfillment status. Because the first workflow stores the order number, the second one has a reliable key to find the right page and update it in place.

Why store the total as a Number and not text?

A Number property lets Notion sum a column, sort by value, and drive rollups and formulas. If you store the total as text, none of that works and you get a plain string. The mapping step converts the Shopify total to a number before it reaches Notion, so your database can total revenue and filter by order size.

Related guides