Knowi connects directly to BigCommerce via its REST Management API (v2 + v3), enabling order, revenue, catalog, and customer analytics on your store data. Join BigCommerce with Google Ads, Stripe, Klaviyo, your data warehouse, and 30+ other sources - no ETL required.
Overview
- Connect to BigCommerce using a store-level API account access token from your store control panel.
- Pull from pre-built collections (Orders, Products, Customers, Categories, Brands, Coupons, Store Info) or use the Custom Query collection for any BigCommerce endpoint.
- Join BigCommerce data with Google Ads, Stripe, MongoDB, PostgreSQL, REST APIs, and 30+ other sources without a warehouse.
- Build revenue dashboards, run product and cohort analysis, and ask questions in natural language.
Connecting
BigCommerce uses API token authentication (not OAuth). You create a store-level API account inside BigCommerce, copy two values - the Access Token and the Store Hash - and paste them into Knowi.
Step 1: Create an API Account in BigCommerce
- Log in to your BigCommerce store control panel.
- Go to Settings, then under the API section click Store-level API accounts.
- Click Create API Account. If BigCommerce asks for the token type, choose V2/V3 API Token. Give it a name (e.g., "Knowi Analytics").
- Under OAuth Scopes, select read-only access for the data you want to query:
- Orders: read-only
- Products: read-only
- Customers: read-only
- Marketing: read-only (for Coupons)
- Information & Settings: read-only
- (add any other read-only scopes you plan to query)
- Click Save. BigCommerce displays the credentials once. Copy two things:
-
Access Token — the
access_tokenvalue. -
Store Hash — found in the API Path shown:
https://api.bigcommerce.com/stores/{store_hash}/v3/. The store hash is the value between/stores/and the next/.
-
Access Token — the
Step 2: Connect in Knowi
- Log in to Knowi and navigate to Queries from the left sidebar.
- Click New Datasource (the + icon), then search for BigCommerce in the datasource selector.
- Fill in the form:
- Datasource Name: A label for this connection (e.g., "BigCommerce Production")
- Store Hash: The store hash you copied from the API Path
-
Access Token: The
access_tokenfrom the API account
- Click Save to store the datasource.
Step 3: Create a Query
- Click Start Querying (or create a new query and select your BigCommerce datasource).
- Select a Collection from the "BigCommerce Options" dropdown:
- Orders — All orders with status, totals, payment method, and customer associations
- Products — Catalog products with pricing, inventory, and visibility
- Customers — Customer records with contact details and group membership
- Categories — Catalog category tree
- Brands — Catalog brands
- Coupons — Coupon codes with type, amount, and usage
- Store Info — Store-level profile and configuration
- Custom Query — Hit any BigCommerce API endpoint
- Fill in the optional filter parameters (status, date ranges, customer ID).
- Click Preview to see results.
- Name your dataset and click Create & Run to save and schedule.
Available Collections
BigCommerce mixes two API versions. v3 collections (Products, Customers, Categories, Brands) wrap rows in a data array alongside a meta.pagination object, so they begin with select expand(data); to flatten the rows. v2 collections (Orders, Coupons, Store Info) return a flat array (or a single object for Store Info), so no expand is needed.
Orders
Returns all orders with status, totals, payment method, and customer associations. BigCommerce v2 API - returns a flat array. Core data for revenue and order dashboards.
Parameters:
| Parameter | Required | Description |
|---|---|---|
| Order Status | No | Filter by numeric status_id (e.g. 1 Pending, 2 Shipped, 10 Completed, 5 Cancelled, 4 Refunded) |
| Customer ID | No | Numeric BigCommerce customer ID (use 0 for guest-checkout orders) |
| Created After / Before | No | Date filter on date_created (ISO-8601 or RFC-2822) |
| Modified After | No | Date filter on date_modified - use for incremental syncs |
Default Cloud9QL:
select id, customer_id, status, status_id, total_inc_tax, subtotal_inc_tax,
total_tax, currency_code, payment_method, items_total,
date_created, date_modified
order by date_created desc;
Products
Catalog products with pricing, inventory, visibility, and brand associations. BigCommerce v3 catalog API - rows are wrapped in a data array, so the query starts with select expand(data);.
Parameters:
| Parameter | Required | Description |
|---|---|---|
| Keyword | No | Search by name, SKU, or description keyword |
| Visible | No |
true (visible) or false (hidden) on the storefront |
| Availability | No |
available, disabled, or preorder
|
| Modified After | No | Date filter on date_modified - use for incremental syncs |
Default Cloud9QL:
select expand(data);
select id, name, sku, type, price, cost_price, sale_price,
inventory_level, inventory_warning_level, is_visible, availability,
brand_id, total_sold, date_created, date_modified
order by date_modified desc;
Customers
Customer records with contact details and group membership. BigCommerce v3 API - rows are wrapped in a data array, so the query starts with select expand(data);.
Parameters:
| Parameter | Required | Description |
|---|---|---|
| No | Exact email match (comma-separate multiple emails) | |
| Customer Group ID | No | Numeric group ID (comma-separate multiple) |
| Created After / Before | No | Date filter on date_created (ISO-8601) |
Default Cloud9QL:
select expand(data);
select id, email, first_name, last_name, company, phone,
customer_group_id, registration_ip_address, date_created, date_modified
order by date_created desc;
Categories
Catalog category tree (v3). Rows are wrapped in a data array, so the query starts with select expand(data);.
Brands
Catalog brands (v3). Rows are wrapped in a data array, so the query starts with select expand(data);.
Coupons
Coupon codes with type, amount, and usage (v2 - flat array).
Parameters: Coupon Code (exact match), Type (per_item_discount, percentage_discount, per_total_discount, shipping_discount, free_shipping, promotion).
Store Info
Store-level profile returned as a single object (v2). Useful as a constant join key when working across multiple BigCommerce stores. No expand needed.
Custom Query
Hit any endpoint not covered by the pre-built collections. Specify the Resource path including the version, e.g. v3/catalog/products, v3/catalog/variants, v3/customers/addresses, v3/pricelists, v2/orders, v2/orders/{order_id}/products. For v3 resources keep the default select expand(data); Cloud9QL; for v2 resources (bare arrays) remove it.
Date Tokens
BigCommerce accepts ISO-8601 (and RFC-2822) timestamps. Knowi date tokens automatically format for you:
{$c9_today:yyyy-MM-dd} - today
{$c9_today-30d:yyyy-MM-dd} - 30 days ago
{$c9_thismonth:yyyy-MM-dd} - first day of this month
{$c9_today-1d:yyyy-MM-dd} - yesterday (for daily incremental syncs)
Cloud9QL Examples
Remember: v3 collections (Products, Customers, Categories, Brands) need select expand(data); first to flatten the data array. v2 collections (Orders, Coupons, Store Info) return flat arrays, so no expand is needed.
Revenue by Day (Orders, v2)
select date_format(date_created, 'yyyy-MM-dd') as order_date,
total_inc_tax
where status_id = 10;
select order_date,
sum(total_inc_tax) as revenue,
count(*) as orders
group by order_date
order by order_date desc;
Top Products by Units Sold (Products, v3)
select expand(data); select name, sku, brand_id, total_sold, price where is_visible = true; select name, sku, total_sold, (total_sold * price) as gross_revenue order by total_sold desc;
New Customers per Week (Customers, v3)
select expand(data);
select date_format(date_created, 'yyyy-ww') as signup_week, id
where date_created >= '{$c9_today-90d:yyyy-MM-dd}';
select signup_week, count(*) as new_customers
group by signup_week
order by signup_week desc;
Scheduling Queries
BigCommerce data changes constantly. Schedule queries to refresh on a cadence that matches your reporting needs:
- Open the query, click the schedule icon.
- Set a frequency (every hour, every 6 hours, daily, weekly).
- Use the Modified After parameter with
{$c9_lastrun:yyyy-MM-dd}to fetch only orders/products changed since the last run.
Cross-Source Joins
BigCommerce becomes much more powerful when joined with other sources. Some common patterns:
BigCommerce + Google Ads: Revenue vs Ad Spend (ROAS)
select o.order_date,
o.revenue as store_revenue,
g.spend as ad_spend,
o.revenue / g.spend as roas
from bigcommerce_revenue_by_day as o
left join google_ads_spend_by_day as g
on o.order_date = g.date
order by o.order_date desc;
BigCommerce + Stripe: Order Revenue minus Processing Fees
select o.id as order_id,
o.total_inc_tax as gross,
s.fee as stripe_fee,
o.total_inc_tax - s.fee as net_revenue
from bigcommerce_orders as o
left join stripe_balance_transactions as s
on o.id = s.metadata_order_id
where o.status_id = 10;
BigCommerce + Klaviyo: Did Win-Back Emails Drive Repeat Orders?
Compare customers who received Klaviyo win-back campaigns vs those who did not, tracking repeat-order rates 30/60/90 days after the campaign.
See Cross-source joins documentation for details.
Rate Limits and Pagination
- Rate limit: BigCommerce applies per-plan request quotas (token-bucket). Knowi automatically respects this with backoff on 429 responses.
-
Pagination: Page-based, up to 250 records per page. Knowi pulls all pages automatically using the
pageparameter and stops when the API returns no more rows. - Backfills: Large catalogs and order histories complete in minutes to a few hours depending on volume. Run during off-hours and rely on incremental (Modified After) syncs after that.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
401 Unauthorized |
Invalid/expired access token, or the API account lacks the required scope | Verify the Access Token in the datasource, and confirm the BigCommerce API account has read-only scope for the resource you are querying |
404 Not Found |
Wrong Store Hash (or wrong resource path on Custom Query) | Re-copy the store hash from the API Path (/stores/{store_hash}/) and check the Custom Query resource includes the version (v3/... or v2/...) |
| Empty results |
status_id filter excludes all orders, or the date range is too narrow |
Clear the Order Status filter or widen the Created After/Before range |
Rows look like {data: [...], meta: {...}}
|
v3 endpoint without expand
|
Add select expand(data); as the first Cloud9QL line for v3 collections |
expand(data) returns nothing on a v2 collection |
v2 endpoints return a flat array, not a data wrapper |
Remove the select expand(data); line for Orders, Coupons, and Store Info |