Creem data models in Chartsy
Exactly what Chartsy reads from one Creem store, what each object becomes in Chartsy, and what it does with your API key.
How the sync works#
- First import - right after you connect, Chartsy reads your products, discounts, customers, subscriptions and payments, from 1 January two years back.
- Live updates - a webhook endpoint Chartsy adds to your store sends completed checkouts, subscription changes, refunds and disputes as they happen. For each event, Chartsy reads the record back from Creem rather than trusting the event body, so a retried or out-of-order delivery can't write stale data.
- Sync now - re-reads the whole store on request, writes only what changed, and puts the webhook back if it was removed or switched off. Creem's lists can't be filtered by date, so there is no hourly sync.
Every record is keyed on Creem's own ids, so the webhook and Sync now can overlap without counting anything twice.
What Chartsy syncs#
| Creem object | Becomes in Chartsy | What is kept |
|---|---|---|
| Product | Product and price | Name, price, currency and billing period (monthly, every three or six months, yearly, or one-time). A Creem product has one price, so both share the product’s id |
| Discount | Discount | Code, percentage or fixed amount, and duration |
| Customer | Customer | Email, name, country, signup date, your external_id, and the Chartsy visitor id when your checkout passed one |
| Subscription | Subscription | Status, seats (units), list price per period, current period, scheduled cancellation, trial dates and discount |
| Transaction | Transaction | Amount paid including tax, tax, Creem’s fee (computed - see below), net amount, currency, tax country, discount and amount refunded |
| Refund or dispute | Adjustment | One per payment, as a negative amount: refunds as refunds, disputes as chargebacks. Updated as further partial refunds land |
How payments are counted#
- A payment that bills a subscription period counts toward MRR, normalized to a month.
- One-time purchases are revenue, not MRR.
- Pending payments aren't revenue until they're paid; declined ones are kept as failed payments.
- Payments in another currency are converted into your account's currency at the rate on the payment's date.
- Churn is counted when paid access ends, not when the customer clicks cancel. A subscription scheduled to cancel counts as active until its period runs out.
- Refunds that arrive by webhook are dated when they happen. Creem only reports a payment's refunded total, so refunds from before you connected are dated on the payment they reverse.
More on each metric in Metrics.
Creem’s fee#
Creem's API doesn't include the fee Creem takes from each payment, so Chartsy computes it from the rate you set when connecting - Creem's standard 3.9% + $0.40 unless you change it - on the payment before tax. Net revenue is the amount paid minus tax and that fee.
The rate is kept as a history. A new rate recorded from a date applies to payments from that date on; a correction applies to every payment. Either way, Chartsy recomputes the affected payments.
What is left out#
- Cancelled and void payments - they were never charged.
- Custom customer metadata - only
external_idand the Chartsy visitor id are kept, so other fields don't become breakdowns. - Payment details - Chartsy never sees card numbers or bank details.
- With GDPR mode on, customer email, name, country and city, and each payment's tax country, aren't stored either.
API key and webhook#
Chartsy connects with your store's API key, encrypted at rest. Only live keys are accepted. It uses the key to read your store and to manage one webhook endpoint, named "Chartsy" - the only thing it writes in Creem. The endpoint listens for:
| Event | Used for |
|---|---|
checkout.completed | A new purchase, with the checkout metadata used for attribution |
subscription.active | Keeping the subscription and its latest payment current |
subscription.trialing | Keeping the subscription and its latest payment current |
subscription.paid | Keeping the subscription and its latest payment current |
subscription.canceled | Keeping the subscription and its latest payment current |
subscription.scheduled_cancel | Keeping the subscription and its latest payment current |
subscription.past_due | Keeping the subscription and its latest payment current |
subscription.unpaid | Keeping the subscription and its latest payment current |
subscription.expired | Keeping the subscription and its latest payment current |
subscription.update | Keeping the subscription and its latest payment current |
subscription.paused | Keeping the subscription and its latest payment current |
refund.created | A refund, and the date it was made |
dispute.created | A chargeback |
Already connected this store?
Each Creem store can be connected once, even with a new key, so its numbers are never doubled.
Deleting your data#
Delete the Creem source on the Data Sources page and it is permanently removed, together with everything imported from it. You can also delete the "Chartsy" webhook endpoint and regenerate your API key in Creem's settings.


