CartRush
Use the CartRush connector to sync subscription orders, active and cancelled subscriptions, order analytics, and conversion analytics into your Athena lakehouse. This is a Blotout custom connector built on the Airbyte Connector Builder (declarative manifest).
Prerequisites
Section titled “Prerequisites”- A tag with Blotout Cloud set up (green checkmark in the Tags table)
- A CartRush API Key — obtain it from the CartRush dashboard or your CartRush account manager
- A CartRush Account ID — identifies which CartRush account (store/brand) to pull data for
Create the pipeline
Section titled “Create the pipeline”Follow the shared Create a pipeline steps until the source catalogue appears, then select CartRush.
Source configuration
Section titled “Source configuration”On the Source step, configure the connector:
| Field | Purpose |
|---|---|
| Schedule Type | How the pipeline runs — typically Scheduled |
| Sync Frequency | How often Airbyte syncs (for example, Every 24 hours) |
| Source Name | Name for this pipeline — used in the Athena schema <SOURCE_NAME>_<ENV> |
Authentication (API Key + Account ID)
Section titled “Authentication (API Key + Account ID)”CartRush authenticates via request headers on every API call:
- Under CartRush Configuration, paste your API Key into the API Key field.
- Enter your Account ID in the Account ID field.
Configuration fields
Section titled “Configuration fields”| Field | Required | Default | Description |
|---|---|---|---|
| API Key | Yes | — | CartRush API key (secret). Sent as the X-Api-Key header on every request. |
| Account ID | Yes | — | CartRush account ID (secret). Sent as the X-Account-Id header. Identifies which store/brand to pull data for. |
| Start Date | Yes | — | Earliest date to pull in YYYY-MM-DD format. Filters on the charge/processed date for order streams. |
| End Date | No | today | Latest date to pull in YYYY-MM-DD format. Leave blank to always sync through today (recommended for scheduled syncs). Set only for bounded historical backfills. |
| Records per page | No | 100 | Page size for the CartRush paginator (range 1–250). The API returns empty data if per_page exceeds its cap — keep at or below 250. If a sync returns 0 records, lower this value. |
| Lookback Window (days) | No | 1 | Days to re-fetch before the last cursor to catch late-arriving or updated rows — renewals, status changes, cancellations (range 1–14). |
Supported sync modes
Section titled “Supported sync modes”The CartRush source connector supports the following sync modes:
- Incremental Sync — Append
Supported streams
Section titled “Supported streams”| Stream | Endpoint | Cursor Field | Filter | Supports Incremental |
|---|---|---|---|---|
subscription_orders_new | /get-subscription-orders-new | processed_at | Server-side | ✅ |
subscriptions_new | /get-subscriptions-new | updated_at | Client-side | ✅ |
cancelled_subscriptions | /get-cancelled-subscriptions | expired_date | Client-side | ✅ |
subscription_additional_columns | /get-subscription-additional-columns | cancellation_attempted_at | Server-side | ✅ |
order_analytics | /get-order-analytics | updated_at | Server-side | ✅ |
conversion_analytics | /get-conversion-analytics | updated_at | Server-side | ✅ |
subscription_orders_new
Section titled “subscription_orders_new”Subscription order charges with product and renewal details. The external_order_id field maps to the Shopify order ID — this is the join key used for the Landing Page dashboard (Sub Take Rate) and CAC/LTV models.
| Field | Type | Description |
|---|---|---|
store | string | Store name |
brand | string | Brand name |
subscription_id | integer | CartRush subscription ID |
shopify_customer_id | string | Shopify customer ID |
currency | string | Currency code |
created_at | string | Subscription created date (MM/DD/YYYY) |
first_created_at | string | First subscription created date (MM/DD/YYYY) |
external_order_id | string | Shopify order ID — join key to Shopify orders |
external_product_id | integer | Shopify product ID |
external_variant_id | integer | Shopify variant ID |
product_title | string | Product title |
purchase_item_type | string | e.g. Renewal / New |
processed_at | string | Charge processed time (epoch ms); from_date/to_date filter on this field |
scheduled_at | string | Charge scheduled time (epoch ms) |
status | string | Order status |
bundle_name | string | Bundle name (if applicable) |
sku | string | Product SKU |
subscriptions_new
Section titled “subscriptions_new”Active subscriptions with frequency and status details. The API returns the full subscription set regardless of date — the connector filters client-side on the cursor.
| Field | Type | Description |
|---|---|---|
brand | string | Brand name |
platform_name | string | Platform name |
order_channel | string | Order channel |
store_name | string | Store name |
subscription_id | integer | CartRush subscription ID |
cartrush_customer_id | integer | CartRush internal customer ID |
Shopify_customer_id | string | Shopify customer ID (note capital S in the API) |
created_at | string | Subscription created date (epoch ms) |
external_product_id | integer | Shopify product ID |
external_variant_id | integer | Shopify variant ID |
next_charge_scheduled_at | string | Next charge date (epoch ms) |
order_interval_frequency | integer | Delivery frequency value |
order_interval_unit | string | Delivery frequency unit (e.g. day, week, month) |
product_title | string | Product title |
variant_title | string | Variant title |
quantity | integer | Quantity |
sku | string | Product SKU |
status | string | Subscription status |
updated_at | string | Last updated (epoch ms) |
cancellation_date | string | Cancellation date (if cancelled) |
cancellation_reason | string | Cancellation reason |
presentment_currency | string | Display currency |
cancelled_subscriptions
Section titled “cancelled_subscriptions”Cancelled or expired subscriptions. The expired_date field is used as the cursor because cancellation_date is typically empty on this endpoint.
| Field | Type | Description |
|---|---|---|
brand | string | Brand name |
subscription_id | integer | CartRush subscription ID |
shopify_customer_id | string | Shopify customer ID |
paid_at | string | Last payment date (epoch ms, often empty) |
shopify_product_title | string | Product title |
shopify_variant_title | string | Variant title |
price | number | Subscription price |
expired_date | string | Expiry date (epoch ms) — cursor field |
cancellation_date | string | Cancellation date (epoch ms, often empty) |
cancellation_reason | string | Reason for cancellation |
purchase_type | string | Purchase type |
bundle_name | string | Bundle name |
subscription_additional_columns
Section titled “subscription_additional_columns”Cancellation flow and save-offer data. Tracks whether a customer attempted cancellation, which offer was shown, and the outcome.
| Field | Type | Description |
|---|---|---|
brand | string | Brand name |
shopify_customer_id | string | Shopify customer ID |
subscription_id | integer | CartRush subscription ID |
email_id | string | Customer email |
attempt_id | string | Cancellation attempt ID |
cancellation_attempted_flag | boolean | Whether cancellation was attempted |
cancellation_attempted_at | string | Attempt timestamp (e.g. 2026-08-01 00:18:46 PDT) |
cancellation_reason | string | Reason selected by customer |
offer_shown_flag | boolean | Whether a save offer was shown |
offer_accepted_at | string | When the offer was accepted (if applicable) |
cancellation_confirmed_at | string | When cancellation was confirmed |
post_flow_outcome | string | Outcome of the flow — e.g. Cancelled / Saved |
order_analytics
Section titled “order_analytics”Order-level analytics with line items, revenue, and upsell tracking. The API returns a nested array-of-arrays envelope — the connector flattens it to emit one record per line item.
| Field | Type | Description |
|---|---|---|
order_id | string | Shopify order ID (null on offer-catalog rows) |
order_line_id | integer | Line item ID |
customer_id_shopify | string | Shopify customer ID |
subscription_id | integer | CartRush subscription ID |
product_id | string/integer | Product ID |
order_date | string | Order date (MM/DD/YY) |
price | string | Line price (e.g. $275.94) |
quantity | integer | Quantity |
gross_sale | string | Gross sale amount (e.g. $266.01) |
discount | string/integer | Discount amount |
refund | string | Refund amount |
upsell_id | integer | 1 = purchased line; >1 = offer shown |
product_title | string | Product title |
order_status | string | Order status |
auto_manual_order | string | Whether auto or manual order |
created_at | string | Created at (MM/DD/YY HH:MM AM) |
updated_at | string | Updated at (MM/DD/YY HH:MM AM) — cursor field |
conversion_analytics
Section titled “conversion_analytics”Conversion and session data tied to landing pages. Tracks visitor sessions, device types, and the path from landing page to order.
| Field | Type | Description |
|---|---|---|
transaction_id | integer | Transaction ID |
date | string | Transaction date (MM/DD/YY HH:MM AM) |
landing_page_url | string | Full landing page URL |
landing_page_path | string | Landing page path |
full_url | string | Full URL with parameters |
visitor_id | string | Visitor identifier |
session_id | string | Session identifier |
customer_id | string | Customer ID |
order_id | string | Associated order ID |
product_title | string | Product title |
cart_id | string | Cart identifier |
device_type | string | Device type |
product_id | integer | Product ID |
created_at | string | Created timestamp |
updated_at | string | Updated timestamp (MM/DD/YY HH:MM AM) — cursor field |
Downstream notes
Section titled “Downstream notes”subscription_orders_new.external_order_idjoins to Shopifyorders.id— this is the subscription flag used by the Landing Page dashboard (Sub Take Rate) and CAC/LTV models- All streams use
additionalProperties: true, so any new fields the API returns are automatically captured - The per-id endpoints (
/get-order-analytics/{orderId},/get-conversion-analytics/{orderId}) are intentionally not ingested — the list endpoints return the same data in bulk
Changelog
Section titled “Changelog”| Version | Date | Description |
|---|---|---|
| 1.0.0 | 2026-08-13 | Initial release with 6 streams: subscription_orders_new, subscriptions_new, cancelled_subscriptions, subscription_additional_columns, order_analytics, conversion_analytics |
Complete Schema and Summary
Section titled “Complete Schema and Summary”Continue through the Schema and Summary steps to choose streams and confirm the connection. Save and run the first sync.
After a successful sync, Airflow creates an organization-scoped DAG for the pipeline, and dbt models feed downstream analytics.
Related documentation
Section titled “Related documentation”- Data Pipelines overview — Tags-first create flow