Loading tutorials…
Loading tutorials…
Attio's data model is its superpower and its trap. Anything is customizable; that means anything is also rewritable into a mess. Get the objects, attributes, and relationships right up front and the rest of the workspace (workflows, views, reports) glides. Get them wrong and you rebuild every 90 days.
Who this is forOps leads, RevOps owners, and founders configuring their first Attio data model — or anyone inheriting a workspace where the same field exists three times under slightly different names. If 'should this attribute live on Person or Company?' has stalled a meeting, this tutorial is for you.
What you'll need
Step 1
Attio ships with People, Companies, Deals, Workspaces, and Users out of the box. Most teams need zero custom objects in their first 6 months.
People records hold person-level data: name, email, phone, role, seniority. One human, one Person record.
Companies records hold organization-level data: domain, industry, headcount, ARR. One organization, one Company record — even if 12 of your People work there.
Deals records hold opportunity-level data: value, stage, owner, expected close date. Multiple Deals can exist per Company (renewal + expansion).
Workspaces / Users are the standard objects for product-led B2B SaaS — tracking the product accounts and end users tied to a Company.
Rule: never put person-level data on a Company record, and never put company-level data on a Person. 'Industry' lives on Company. 'Role' lives on Person. Mixing them up makes segmentation impossible later.
Step 2
Workspace settings → Objects → click an object → Attributes. Attio ships with most fields you need; create custom attributes only when defaults genuinely do not cover.
Workspace settings → Objects → pick object → Attributes. Read through every default. Filter by group.
Common attributes owners re-create unnecessarily: Job title (on People), Industry (on Companies), Estimated ARR, Headcount, Lifecycle stage, Lead source.
When you must create custom: click "Add attribute" → choose attribute type carefully. Attribute type is hard to change later without losing data (Text → Select is fine; Number → Select is not).
Group custom attributes into clear sections — Sales, Customer Success, Billing, Marketing Attribution. Never let custom attributes pile up in "Other."
Write a description on every custom attribute. Future-you in 18 months will not remember why `lead_score_v3` exists or what `account_health_signal` actually measures.
Step 3
Attio has ~12 attribute types. Wrong type now = lossy migration later. Especially for Select vs Status, and Currency vs Number.
Text vs Rich text: Text for short single-line values (job title, lead source). Rich text for long-form notes (call summary, account brief). Do not use Text for notes — you will hit length and formatting limits.
Select (single) vs Multi-select: Select for mutually exclusive values (Lifecycle stage). Multi-select for tags (Use cases, Product modules).
Status: a special Select with workflow semantics — use for Deal stage, Lead status, Ticket status. Status powers Kanban views automatically.
Number vs Currency: Currency carries unit metadata (USD, EUR) and respects workspace primary currency. Number is just a number. Use Currency for any money field, always.
Date vs Date + time: Date for things like Close date. Date + time for Created at, Last contacted at, Demo scheduled at. Mixing the two breaks workflow timing.
Reference (Relationship): the killer feature — link records across objects. People reference Companies, Deals reference Companies + People, custom objects reference whatever you want. Set the cardinality (one-to-one vs one-to-many) consciously.
Step 4
Attio's flexibility means a Person can be linked to a Company in five different ways. Decide which relationships matter and label them.
Default relationships: Person ↔ Company (auto-linked by email domain match), Deal ↔ Company, Deal ↔ Person (associated contacts).
For richer relationships, use labeled reference attributes. Add a "Champion" reference attribute on Deal pointing to People. Add a "Renewal owner" reference attribute on Company pointing to Users.
Avoid putting relationship data in free-text attributes ("Sarah is the champion" written in a notes field) — Attio cannot filter, report, or automate on text. Always use a typed reference attribute for relationships you will query.
Document the relationship map. A simple diagram (People — Companies — Deals — Workspaces, with labeled relationships) saves dozens of hours of confusion later.
Step 5
Custom objects are powerful — and easy to add too early. The default test: is this a new noun in your business, not a property of an existing one?
Workspace settings → Objects → "Create object" (Plus / Pro tier).
Good custom object candidates: Subscriptions, Contracts, Invoices, Properties (real estate), Vehicles (automotive), Loans (fintech), Events (community), Jobs (recruiting).
Bad custom object candidates: "Sales notes" (use Rich text on Deal), "Activity logs" (use Activities), "Touchpoints" (use Interactions, built in), "Lead score components" (use Number attributes on Person).
For every "I need a custom object" idea, ask: is this a noun that has its own attributes AND relationships AND lifecycle? If only one of those, it is probably an attribute or a list, not an object.
Once created, custom objects participate in the data model exactly like standard objects — they have attributes, relationships, views, lists, workflows, and API endpoints.
Step 6
Attio dedups People by email and Companies by domain. Anything else (phone, name) requires manual merge. Set the rules now or live with duplicates forever.
Workspace settings → Objects → People → Matching. Confirm primary email is the dedup key.
For People: Attio auto-merges on email match during import. If a Person has no email, it imports as new every time — this is the #1 source of People duplicates.
For Companies: Attio auto-merges on root domain match. Add common alias domains (acme.com, acme.io) to the Company record manually to chain them together.
Before importing a CSV, deduplicate within the CSV first using Excel / Google Sheets. Attio will not catch within-file duplicates.
After import, use the Duplicates view (Companies → Duplicates tab) to find and merge any straggler records. Run this monthly for the first quarter, then quarterly.
Step 7
Always import 20-50 sample rows before the full file. Catching a field-mapping error at 20 rows is five minutes; catching it at 20,000 rows is a two-day cleanup.
Workspace settings → Imports → Start import. Pick the object you want to test (start with Companies).
Upload a 20-row sample CSV. Map every column to an attribute. Pay special attention to: Date formats (Attio expects ISO 8601 or M/D/YYYY), Currency fields (must specify the currency), Reference fields (must match an existing record by email or domain).
Run the test import. Open 5 random records. Are attributes populated correctly? Are relationships auto-linked? Did dedup work as expected?
If anything is wrong, fix the CSV or attribute, then re-test on the same 20 rows. Repeat until clean.
Then run the full import. Always import Companies first, then People (with Company domain column), then Deals (with Company domain + Person email columns). Otherwise relationships break.
Common mistakes
Putting company data on Person records
What goes wrong: Industry, headcount, ARR end up duplicated on every Person record. When you change a Company's industry, you would need to update 12 Person records. Reports double-count. Segmentation breaks. RevOps spends 4-6 hours/month untangling — at $200/hr loaded cost, that is $800-1,200/month of avoidable burn.
How to avoid: Move company-level attributes to the Company object (Workspace settings → Objects → Company). Reference them via the Person → Company relationship — a Person's industry is their Company's industry.
Creating a custom object for what is really a Select attribute
What goes wrong: You build a 'Subscription tier' custom object with three records (Starter, Pro, Enterprise). Now every Company has a reference attribute pointing at this object. Workflows that should be one-line ('Send email when tier = Pro') require nested queries. Three months in, the custom object is more friction than value — and unwinding it is a $300-600 specialist project plus re-pointing every dependent workflow.
How to avoid: Use a Select attribute on Company instead. Custom objects only for things with their own lifecycle, attributes, AND relationships.
Using Text attributes where Select or Status would work
What goes wrong: Lead source is a Text attribute. Reps type 'LinkedIn', 'linkedin', 'Linked In', 'LI'. Reports cannot group cleanly. Filters miss half the data.
How to avoid: Convert to a Select attribute with a fixed value list. Migrate existing data via a workflow or CSV re-import.
Skipping deduplication on the CSV before import
What goes wrong: Your 12,000-row CSV has 800 within-file duplicates (same email with different casing or whitespace). Attio does not catch within-file duplicates. You end up with 12,000 records, 7% of which are dupes. Cleanup is a 2-day project — roughly $3,000-5,000 in operator time, plus stale data biasing every report you build for the next quarter.
How to avoid: Before any import: open the CSV in Excel / Sheets, use Conditional Formatting or =COUNTIF to find duplicate emails / domains, deduplicate, THEN import.
Not setting cardinality on reference attributes
What goes wrong: You add a 'Champion' reference on Deal pointing to People, but leave it as multi-select. Reps add 3-5 champions per deal. Now you cannot answer 'which deals have no clear champion?' because everything has at least one.
How to avoid: Decide upfront: is this attribute one-to-one (a deal has exactly one champion) or one-to-many (a deal has 1+ associated stakeholders)? Set the cardinality intentionally.
Importing Deals before Companies are clean
What goes wrong: Deals get linked to the wrong Company (or no Company). Account-level revenue rollup is wrong. ABM reporting is meaningless. Expansion-deal history per account is invisible. On a $2M ARR book, 20% mis-attribution = $400K of revenue mis-routed in the reports — board reviews catch the inconsistency before you do.
How to avoid: Always import Companies first. Then People (with Company domain column). Then Deals (with Company domain + Person email columns). Always require a Company link at Deal creation time.
Recap
Done — what's next
How to set up an Attio workspace without painting yourself into a corner
Read the next tutorial
Hand it off
Data model decisions compound. A specialist who has built 30+ Attio workspaces knows which attributes should be Select vs Status, which relationships need cardinality discipline, and how to import without breaking links. EverestX specialists handle data-model design end-to-end at $14-16/hr — typically $400-800 for the initial schema work.
See specialist rates
HubSpot has fixed standard objects (Contacts, Companies, Deals, Tickets) with custom objects only on Enterprise. Attio treats all objects as equally customizable — standard objects can have unlimited attributes, custom objects exist on Plus+, and relationships are typed references everywhere. The model is closer to Airtable or Notion than to traditional CRMs. More flexibility, more design responsibility.
Two patterns: (1) One Company record with a Division attribute on associated People and Deals — simplest. (2) Parent + child Company records linked via a 'Parent company' reference attribute — better when divisions have meaningfully different motions or you need separate ABM reporting per unit.
If you have a true subscription business (MRR, plans, billing cycles, contract terms), Subscriptions deserves its own custom object — it has lifecycle, attributes, AND relationships. If you have one-off deals with an annual value, just add 'Contract length' and 'MRR' attributes on Deal. Rule of thumb: if a Company can have multiple active subscriptions at once, model it as an object.
Some conversions are safe (Text → Rich text, Select → Multi-select with manual remap). Others lose data (Number → Select, Date → Text). Workspace settings → Objects → attribute → Edit. Always export the data first as a backup before changing types on attributes with 1,000+ populated records.
No — custom objects require Plus or Pro. The Free plan ships with the standard objects (People, Companies, Deals, Workspaces, Users) and unlimited custom attributes on those. For most early-stage teams this is enough for the first 3-6 months.
Attio
Attio is the modern, fast, Notion-influenced CRM that B2B SaaS teams are picking when HubSpot starts feeling rigid. It's also easy to break in the first month — wrong workspace name, wrong currency, wrong member roles, wrong billing seat plan. Here is the setup sequence that holds up.
Attio
Views are where the Attio data model meets daily rep work. The right views make adoption automatic. The wrong views — 18 columns wide, no filters, no group — push reps back to spreadsheets within a month. Here is the discipline that holds up.
Salesforce
The Lead-Contact-Opportunity distinction is the single most-confused concept in Salesforce. Get it wrong and your reports double-count revenue, your reps work duplicate records, and Marketing keeps emailing people who already closed. Here is the discipline that holds up at scale.
Attio
DIY Attio is a great idea — until it isn't. This is the honest framework for when the cost of self-managing exceeds the cost of hiring help, and how to tell which side you are on.