Add Stripe customers to Attio
A Stripe + Attio agent flow
Someone pays you, and for a while the only system that knows their name is Stripe. Sales and success work in Attio, so a brand-new paying customer is invisible to the people whose job is to keep them. This recipe pulls fresh Stripe customers into Attio as person records, so the CRM reflects who's actually paying. Your agent calls list_customers, reads the ones created since it last ran, and writes each into Attio with create-record: name, email, and the Stripe customer ID stored on the record. The Stripe server replies to calls rather than pushing, so the agent runs on a cadence, every fifteen minutes or each hour, and only customers it hasn't seen become records. New paying accounts land in front of the team that owns the relationship.
The flow
list_customersLists the customers on the account.
create-recordCreates a new person, company, deal, or custom-object record.
Step by step
- Map Stripe fields to Attio attributes
Decide whether each customer becomes a person or a company record, and which Attio attributes hold the email, name, and a custom field for the Stripe customer ID. List those attribute slugs for the agent.
- Read recent customers
The agent calls list_customers, which returns customers newest-first and paginates. It reads down to the last customer it processed and stops, so it only handles new ones.
- Create the Attio record
For each new customer it calls create-record with the mapped attributes, putting the Stripe customer ID into your dedicated field so the record traces back to billing.
- Prefer upsert to avoid collisions
Where a person may already exist by email, use upsert-record instead of create-record so a returning or duplicate customer updates the existing record rather than spawning a second one.
Tell your agent
Every 15 minutes, list new Stripe customers created since the last run. For each, upsert an Attio person record matched on email, setting name, email, and the Stripe customer ID in the 'stripe_id' attribute. If a person already exists for that email, update it instead of creating a duplicate.
Setup
This flow needs both servers connected to your agent. Follow each install guide:
Worth knowing
- list_customers returns results newest-first and paginates. Track the last customer ID or created timestamp you handled, and page until you reach it, so you don't reprocess the whole account each run.
- create-record writes to Attio attribute slugs, not display labels. Pull the object's attributes once with list-attribute-definitions and pass the exact slugs, including your custom Stripe-ID field.
- Many Stripe customers have an email but no name, or a name set later. Decide upfront whether email alone is enough to create a record, and use upsert-record keyed on email to keep the CRM from filling with near-duplicates.
Questions
- Person or company record?
- Depends on your data. A self-serve customer is usually a person keyed on email. If you sell to accounts, create or upsert the company and attach the person to it, using the Attio attributes you mapped.
- What stops it adding the same customer twice?
- Two guards. Track which Stripe customers you've already pulled so you read only new ones, and use upsert-record matched on email so even a re-read updates rather than duplicates.
- Does it sync instantly when someone pays?
- No. The Stripe server answers the agent's call; it doesn't notify Attio. The CRM trails new signups by your interval, so tighten the cadence if sales needs to reach customers fast.