Baseify documentation
Everything you need to mirror Shopify into Baserow — from first install to advanced relational syncs.
Overview
Baseify keeps a real-time, one-way copy of your Shopify store inside a Baserow database you own. The flow is simple:
Shopify change
→ webhook (HMAC-verified, queued, acknowledged in <5s)
→ Baseify fetches the authoritative record via the Shopify Admin API
→ transforms it per your field mappings
→ upserts the row into your Baserow tableBaseify always re-fetches the current record rather than trusting the webhook payload, so duplicate or out-of-order deliveries can never corrupt your data. Deletes are deterministic via a stored ID-to-row mapping. Nothing is ever written back to Shopify.
Requirements
- A Shopify store where you can install apps.
- A Baserow instance — Baserow Cloud (
api.baserow.io) or a self-hosted server. - A Baserow database token with create / read / update / delete permission on the destination database.
- Optional: Baserow account credentials, which let Baseify browse your databases, tables and fields inside the app (otherwise you can type IDs and field names manually).
A Baserow database token can read and write rows but cannot browse your schema. Adding account credentials unlocks the in-app schema browser; without them, enter database/table IDs and field names by hand.
Install Baseify
Install Baseify from the Shopify App Store (or enter your .myshopify.com domain on the home page). Approve the requested read-only scopes and the $24.99/month subscription, and the app opens embedded in your Shopify admin.
Connect Baserow
Open the Baserow tab and add a connection:
- Base URL — e.g.
https://api.baserow.ioor your self-hosted URL. - Database token — created in Baserow under settings; scope it to the destination database.
- Name — a label, since you can add more than one connection.
Click Save & test. Baseify encrypts your token, verifies it, and (if you added account credentials) enables the schema browser. You can add, edit, test and remove connections any time from the Baserow tab.
Quick start: templates
The fastest way to start is the Quick setup tab. Pick a template and Baseify provisions a fully-typed Baserow database with linked tables, then creates pre-mapped syncs for you:
- Compact — the essentials to get going.
- Complete — up to ten linked tables: Products, Variants, Collections, Customers, Orders, Order Line Items, Draft Orders, Fulfillments, Fulfillment Line Items and Locations.
After provisioning, run Backfill all to populate the tables in dependency order so relationships resolve on the first pass.
Create a sync manually
From the Syncs tab, choose Create sync:
- Choose a resource (e.g. Products, Orders, Customers) and the events to track — create, update, and/or delete.
- Choose the connection, database and table in Baserow.
- Designate the external key — the Baserow column that stores the Shopify ID. This is required and makes upserts and deletes deterministic.
- Map your fields (see below), then enable the sync. Webhook subscriptions register automatically.
Field mapping & transforms
Map any Shopify GraphQL field to a Baserow column. Pick from the introspected field catalog, or enter a path by hand for nested values, for example:
variants.edges.node.price → "Price"
customer.defaultAddress.city → "City"
totalPriceSet.shopMoney.amount → "Total"Optional transforms cover the common cases:
- Money — normalize money fields to a number.
- Date — format timestamps.
- JSON — stringify structured values.
- Take-first / Join — collapse lists into a single value.
Don't map into Baserow field types that are read-only (formula, lookup, rollup, count, autonumber, created/modified). Baseify writes scalar and link-row fields; computed fields update themselves.
Backfill existing data
New syncs only receive future changes. To load what already exists, open the sync and run Backfill. Baseify enumerates your records with Shopify Bulk Operations and runs each through the same pipeline. Backfill is idempotent and safe to re-run. For templates, use Backfill all to process tables in dependency order.
Relationships (link rows)
Baseify writes native Baserow link-row fields so your tables reference each other:
- Orders → Customers
- Order line items → Orders, Variants, Products
- Variants → Products
- Fulfillments → Orders, Locations
- Fulfillment line items → Fulfillments, Order line items
- Products ↔ Collections
Links are two-way, so Baserow rollups and lookups work in both directions. A relationship resolves once both the source and target rows exist — which is why backfilling in dependency order matters. Provisioned a database before relationships existed? Use “Add relationships to existing tables” on the Quick setup tab to add the link columns in place, then backfill.
Link targets resolve to a table within the same Baserow database. If you sync the same resource into two tables in one database, the older sync is treated as the canonical link target.
Per-location inventory
Enable inventory on the Variants sync to capture available and on-hand quantities for each location, each in its own column named like Inventory · Warehouse (available). Columns self-heal: add or remove a Shopify location and Baseify reconciles the columns automatically. You can also trigger Sync inventory locations from the sync's detail page.
Multiple connections & syncs
- Multiple Baserow connections — connect several instances (Cloud or self-hosted). Each sync uses its own connection.
- Multiple syncs per resource — send the same resource to more than one table or database (e.g. an analytics base and an ops base).
- Syncs are grouped and collapsible by connection and database, so even large setups stay readable.
Resources & protected customer data
Supported resources:
ProductsVariantsCollectionsOrdersOrder line itemsCustomersDraft ordersFulfillmentsFulfillment line itemsLocationsInventory
Syncing Orders or Customers involves Shopify Protected Customer Data. Make sure your use complies with applicable law and Shopify's requirements. Baseify requests read-only scopes and minimizes what it retains — the data lives in your Baserow.
Event log & retries
The Event log shows every sync event with its status. Filter by sync or status, and retry any event that failed or was sent to the dead-letter state — for example after fixing a mapping or a Baserow permission. Open a specific sync's event log from its detail page.
Security & data handling
- Baserow tokens and credentials are encrypted at rest (AES-256-GCM); only the last four characters are shown back to you.
- Every webhook is HMAC-verified; embedded requests use Shopify session tokens.
- Data moves over TLS; every query is scoped to your shop.
- Baseify retains only mappings and short-lived event records — your records live in your Baserow.
See the Privacy Policy for full detail on what we store and for how long.
Uninstalling & data deletion
Uninstall from your Shopify admin to stop billing and remove Baseify. This triggers Shopify's shop-redact flow, and Baseify purges all of its data for your shop — tokens, configuration, mappings, event records, webhook registrations and sessions. The data already written to your Baserow stays intact. Baseify also honors Shopify's customer redaction and data-request webhooks.
Troubleshooting
“Permission denied” writing to Baserow
Your database token must have create / read / update / delete on the target database. Re-check the token's scope in Baserow, then re-test the connection and retry the failed events.
Relationships aren't filling in
A link only resolves once both rows exist. Backfill in dependency order (use Backfill all), and confirm the source and target syncs point at the same Baserow database.
Numbers imported as text
If a Baserow column was created as text, use Fix number columns in the sync's Maintenance section, then re-sync.
A new location isn't showing in inventory
Run Sync inventory locations on the Variants sync; Baseify will create the missing columns and backfill them.
Can't browse my Baserow schema
A database token can't read schema. Add your Baserow account credentials to enable the browser, or enter the database/table IDs and field names manually.
Support
Still stuck? Email tommy@tommyrush.dev or read the FAQ. We're glad to help you get your data flowing.