Integration
Recurly + Bastle
What syncs from Recurly, what it makes possible, and how to connect it.
This connector works and can be connected today, with edge cases still being closed. Check the first month against the source before you rely on it.
What does the Recurly integration do?
What syncs
Bastle reads the following from Recurly and normalises it into the same entities every other source produces. Ingestion is read-only: nothing is created, changed or cancelled upstream.
- Plans → Bastle plans, including plans referenced by a subscription but missing from the plan sweep, which are fetched individually so no subscription lands without its plan.
- Accounts → customers, and subscriptions with their add-ons.
- Transactions → charges and refunds.
- Dunning notifications, which set and clear the delinquency flag.
- Incremental syncs by updated-at cursor, so a resumed import picks up rather than restarts.
- Cadence: webhook-driven for changes; historical import run manually today.
Once connected
What Recurly data unlocks
Connecting a source is not the point; what you can answer afterwards is. These are the questions this data makes answerable.
Interruptible imports
Backfill persists one page at a time in plan, account, subscription, transaction order, so progress survives an interruption rather than starting over from the first page.
EU data residency respected
The connector targets Recurly's EU API host when the source is configured for the EU region, so an EU-resident Recurly site is not read through a US endpoint.
Dunning visible where you act on it
Recurly's dunning event notifications land as Bastle events, which is what the failed-payment queue and Recover campaigns read from.
Setup
Connecting Recurly
The whole flow, start to first chart. No implementation call and no data engineer.
- Create a Recurly API keyIntegrations → API Credentials in Recurly. The key is used as the basic-auth username against the v3 API.
- Connect the site in Settings → IntegrationsSupply the API key and choose the data region — US or EU. The region determines which Recurly host Bastle reads from.
- Configure a webhook endpoint in RecurlyPoint it at /api/webhooks/recurly and enable signature verification, then store the signing secret in Bastle. Endpoint basic auth can be configured as well; when it is, both checks must pass.
- Ask us to run the historical importBackfill runs manually during onboarding while the scheduled runner is being wired.
Ordering is a correctness property, not an optimisation
Recurly backfill walks plans, then accounts, then subscriptions, then transactions, persisting each page as it goes. The order exists so a subscription is never written before the plan and account it points at. Occasionally a subscription references a plan the sweep did not return — usually deleted or created mid-import — and the connector fetches that plan individually rather than dropping the subscription. A silently skipped subscription is a permanently wrong MRR figure, and it is the kind of error nobody notices until a board meeting.
Signature verification
Recurly signs JSON notifications with a timestamped HMAC. Bastle recomputes it, compares in constant time, and rejects anything older than five minutes so a captured request cannot be replayed later. Where endpoint basic auth is also configured, every configured method must pass — enabling a second check never weakens the first.
Rate limits
List calls page at 200 records sorted by updated-at ascending, which is Recurly's own recommendation for a stable cursor. Rate-limited and unavailable responses honour the retry headers Recurly returns and back off up to five times rather than hammering the API, so a large import is slow before it is disruptive.
What "beta" means here
The connector is written and the inbound webhook route verifies signatures and writes normalised rows, so a connected account keeps up with changes as they happen. What is not self-serve yet is the historical backfill: the code that walks your provider's API from the beginning exists in the connector, but the scheduled runner that triggers it is still a stub, so first-time imports are run by hand with us. Expect to email someone once during setup, and expect that to stop being true.
Bastle is free while in beta, connectors included. There is no tier that unlocks a provider.
Related
Other sources
Companies billing through Recurly usually have at least one of these in the stack too.
- StripeBetaThe Stripe integration turns a Stripe account into Bastle's subscription data model: prices become plans, subscriptions carry their add-ons and discounts, and charges carry the Stripe fee from the balance transaction. Ongoing changes arrive over a signature-verified webhook endpoint within seconds of happening in Stripe, so MRR, churn and failed-payment state track the billing account rather than a nightly export.
- ChargebeeBetaThe Chargebee integration reads a Chargebee site through the v2 API with Product Catalog 2.0 semantics: item prices become plans, subscriptions carry add-ons, and invoices and transactions become charges and refunds in integer cents. Webhooks authenticated with HTTP basic auth keep subscription and dunning state current between imports.
- BraintreeBetaThe Braintree integration reads a merchant account through the Braintree GraphQL API and ingests real-time webhooks, importing customers, recurring billing subscriptions, transactions, refunds and disputes. Identifiers are normalised to Braintree's legacy ids throughout, because that is what the webhook payloads carry.
- WebhooksLiveBastle sends outbound webhooks for subscription, charge, trial and dunning events derived from every connected source, signed with an HMAC header and retried on a backoff schedule across roughly fourteen hours. Endpoints subscribe with exact event types or wildcard patterns, and delivery history is visible in settings. This is shipped and self-serve today.
Recurly and Bastle: common questions
Does Bastle support Recurly's EU region?
What happens if a large import is interrupted?
Which Recurly API version does Bastle use?
Does Bastle write anything back to my billing provider?
Connect Recurly and see your own history.
Bastle backfills what Recurly will serve, then keeps current over webhooks — usually a couple of minutes before the first real chart. Free while in beta, no card required.