Skip to content
adapters.io

Shopify to Postgres integration for a queryable store replica

The Shopify to Postgres integration from Adapters syncs orders, line items, customers, products, and refunds from the Shopify Admin API into your own Postgres tables on an incremental schedule, so internal dashboards and app features join store data to your own tables instead of paging the Shopify API live. Field mapping is no-code, so try it against sample records in the live demo.

No credit card required.

Field mapping auto-plugged · tap a port to rewire

5 sample records ready

Last updated September 2026

What running Shopify to Postgres by hand costs you

  • Querying the Shopify Admin API live burns the leaky-bucket rate limit and makes any internal dashboard slow, so you want a local Postgres copy to join against.
  • Orders change after they are placed (edits, partial refunds, cancellations), so a one-time import into Postgres is wrong within a day.
  • Blending Shopify revenue with your own product, inventory, or subscription tables needs both sitting in the same database, not one in an admin panel and one in Postgres.

The field mapping, out of the box

These cables are pre-wired when you pick the pair. Rewire any of them, or add your own, in the same visual data mapping tool you use for every adapter.

Input / SHOPIFY

order.id
shopify_order.id
order.total_price
shopify_order.total_price
order.financial_status
shopify_order.financial_status
line_item.sku
shopify_line_item.sku
customer.email
shopify_customer.email
order.updated_at
shopify_order.updated_at

Transforms included

Incremental loads use the Shopify updated_at watermark so edits, partial refunds, and cancellations flow through on the next run rather than leaving a stale order behind; money fields arrive as decimal strings and cast to Postgres NUMERIC so cents never round through a float, timestamps become TIMESTAMPTZ in UTC, line items land in their own child table keyed to the order, and writes upsert with ON CONFLICT on the Shopify id so a retry never double-inserts.

Shopify to Postgres in depth

Store data in a relational database you control, usually so orders can be joined to something Shopify has never heard of. The Shopify side is metered in a way that surprises people, and the money type is the opposite shape to every payment processor. Read from Shopify and PostgreSQL documentation on 23 August 2026.

Shopify money is a decimal, not minor units

This is the trap for anyone who has integrated a payment processor first. MoneyV2.amount is a Decimal! such as 12.99, with a separate currencyCode field. It is not in cents. Applying the divide-by-100 you wrote for Stripe turns a $12.99 order into thirteen cents. Land it in NUMERIC(19,4) and never in the PostgreSQL MONEY type, whose behavior depends on the server lc_monetary setting.

GraphQL costs points per second, not requests per second

Shopify does not count your calls, it prices them. The GraphQL Admin API meters calculated query cost in points per second: 100 on Standard, 200 on Advanced, 1,000 on Shopify Plus and 2,000 on Enterprise. The same extraction job behaves like a different product on two plans, which is why a connector that worked at a client on Plus can crawl at one on Standard.

A query over 1,000 points is rejected, not throttled

There is a hard per-query ceiling of 1,000 points, and exceeding it rejects the query outright rather than delaying it. Backoff never fixes this, because retrying an oversized query just fails again. Flatten the selection set or split it into several queries. Every response also returns requestedQueryCost, actualQueryCost and throttleStatus, so pace against those and you never see THROTTLED at all.

Use bulk operations for the initial backfill

Bulk operations run asynchronously, return JSONL, and are not subject to the normal cost and rate limits, which makes them the correct tool for loading history. From API version 2026-01 you get 5 concurrent bulk query operations per app per shop, a maximum of 5 connections and 2 nesting levels per query, and the signed result URL expires after one week. Download promptly.

Counts are only accurate up to 25,000 objects

The pagination ceiling is 25,000 objects and counts are only accurate below it. So verifying a load by comparing a Shopify count to your Postgres row count can compare two numbers that were both capped in the same place and agree while both being wrong. Verify by reconciling a known order end to end instead, or by comparing sums rather than counts.

Timestamps need TIMESTAMPTZ or the watermark drifts

Shopify timestamps carry an offset. Land them in TIMESTAMPTZ, not TIMESTAMP. An incremental sync keyed on a plain timestamp drifts by an hour twice a year at daylight saving boundaries, and the orders in that gap are never picked up. Nothing errors, the table is just quietly short.

Pin the API version, because unknown versions fall forward

Shopify ships a new version every three months at 5pm UTC on 1 January, 1 April, 1 July and 1 October, and supports each stable version for at least twelve months with at least nine months of overlap. A request to a version that is no longer accessible falls forward to the oldest accessible stable version rather than failing, so an unpinned integration can silently start speaking a different API. Pin it and diary the upgrade. Full limit set: Shopify API rate limits.

REST is legacy, build new work on GraphQL

The REST Admin API has been legacy since 1 October 2024, and since 1 April 2025 all new public apps must be built exclusively on the GraphQL Admin API. Its leaky bucket of 40 requests refilling at 2 per second is still documented, but it is not where new integrations should start. The wider destination comparison is on Shopify integration tools and Postgres ETL tools.

How it goes live

Three steps, minutes end to end, covered by flat data integration pricing from $49 a month.

STEP 01

Pick the pair

Connect Shopify and Postgres with scoped credentials. About a minute each.

STEP 02

Confirm the mapping

The cables above are pre-wired. Adjust any field, preview the transform on sample records, done.

STEP 03

Schedule the sync

Hourly down to every minute, with retries, alerting, and a full log on every run.

Prefer to understand the moving parts first? Our long-form guide to the Shopify to Postgres guide covers the field-by-field detail, the failure cases, and what changes at volume.

Try it in the live demo Preloads SHOPIFY → POSTGRES with sample records

Shopify to Postgres sync: common questions

How do I sync Shopify to Postgres?

Authorize the store, select orders, line items, products, variants, customers and inventory, map them onto Postgres tables, and pick a schedule. The sync respects the Shopify rate limit, walks the pages, and upserts on the Shopify id with ON CONFLICT so re-running after a failure repairs the table instead of duplicating orders.

Why is the first Shopify sync so slow?

Rate limits. The Shopify REST Admin API uses a leaky bucket with a capacity of 40 requests that drains at 2 requests per second on standard plans, 4 per second on Advanced and 20 per second on Shopify Plus. A store with years of order history is therefore hours of paged requests on a first full backfill, and minutes per run after that.

How should Shopify orders be modeled in Postgres?

Split the order header from the line items into two tables joined on the order id, and keep refunds and transactions separate again. A single flattened table forces you to choose between duplicating the order total on every line or losing line detail. Store the raw JSON payload in a JSONB column alongside the typed columns for anything you have not modeled yet.

Do Shopify orders change after they are created?

Constantly. Orders get edited, fulfilled, partially refunded, cancelled and tagged long after creation, and the financial status moves with them. Sync on the updated_at watermark and upsert, so those edits land. An append-only load keyed on created_at produces a table that was accurate the night each order was placed and wrong ever since.

How does the Shopify to Postgres sync work?

The Shopify to Postgres integration from Adapters syncs orders, line items, customers, products, and refunds from the Shopify Admin API into your own Postgres tables on an incremental schedule, so internal dashboards and app features join store data to your own tables instead of paging the Shopify API live. Field mapping is no-code, so try it against sample records in the live demo.

Is there a prebuilt Shopify connector for Postgres?

Yes. This Shopify to Postgres connector ships prebuilt: the field mapping is wired the moment you pick the pair, transforms are included, and you can try it against sample records in the live demo. No code or engineering sprint required.

How much does the Shopify Postgres integration cost?

Pricing is flat and monthly: Starter at $49, Growth at $149, Scale at $399. Every plan includes this pair, visual field mapping, and per-record logs. There are no per-task or per-row fees, so the bill stays the same as volume grows.

How often can Adapters sync Shopify to Postgres?

Hourly on Starter, every 5 minutes on Growth, and down to every minute on Scale. Failed records retry automatically with backoff, and alerting plus a full per-record log come standard on every run.

Do I need to write code to connect Shopify and Postgres?

No. Fields are auto-mapped the moment you pick the pair, and you can rewire any mapping visually before the first sync. Incremental loads use the Shopify updated_at watermark so edits, partial refunds, and cancellations flow through on the next run rather than leaving a stale order behind; money fields arrive as decimal strings and cast to Postgres NUMERIC so cents never round through a float, timestamps become TIMESTAMPTZ in UTC, line items land in their own child table keyed to the order, and writes upsert with ON CONFLICT on the Shopify id so a retry never double-inserts.

More pairs from the API connector library

stripe quickbooks integration shopify netsuite integration salesforce hubspot integration airtable google sheets sync postgres to snowflake sync shopify quickbooks integration salesforce netsuite integration paypal quickbooks integration square quickbooks integration stripe netsuite integration hubspot quickbooks integration quickbooks to xero migration shopify xero integration salesforce to snowflake integration square netsuite integration hubspot xero integration salesforce to bigquery integration postgres to bigquery netsuite to snowflake integration quickbooks to bigquery integration stripe to snowflake integration shopify to snowflake integration quickbooks to snowflake integration hubspot to snowflake integration netsuite to bigquery integration stripe to bigquery integration shopify to bigquery integration paypal to snowflake integration square to snowflake integration square to bigquery integration netsuite to postgres integration salesforce to postgres integration xero to snowflake integration hubspot to bigquery integration xero to bigquery integration paypal to bigquery integration stripe to postgres integration snowflake to bigquery migration hubspot to postgres integration bigquery to snowflake migration quickbooks to postgres integration xero to postgres integration square to postgres integration paypal to postgres integration snowflake to postgres mysql to postgres migration mysql to snowflake redshift to snowflake migration mysql to bigquery sql server to snowflake sql server to postgresql migration

Browse the full api connector library, or request a pair you do not see.

Shopify and Postgres, finally in agreement

Map the pair once and let it sync on schedule. Flat price from $49 a month, no per-task fees.

Try the live demo

No credit card required.