Migration Playbook

monday.com Attio

monday.com to Attio: The Complete Migration Playbook

A 46-step runbook across six phases — track your progress, and open the right tool at every step.

0 / 46 steps complete 0%
TL;DR

CSV exports flatten monday.com relationships and skip activity history. API-based migration with strict dependency ordering is the only path that preserves Account → Contact → Deal chains in Attio.

There is no native one-click migration path from monday.com to Attio. The core challenge is a fundamental data-model mismatch: monday.com uses a flat, board-based structure with Connect Boards links (UI references, not foreign keys), while Attio enforces an object-relational schema with typed relationship attributes, lists, and workspace-wide attribute definitions. A successful migration requires custom schema restructuring—translating boards into objects, rebuilding relationship chains (Account → Contact → Deal), and re-mapping pipeline stages from board groups/Status columns into Attio's list-based stage attributes. CSV and no-code tools handle only simple flat data; preserving relationships, activity history, and pipeline context demands a custom API-based ETL pipeline.

Read this first

Pair-specific gotchas that catch teams out. Each one has cost somebody a weekend.

Companies and People count toward these object limits

Custom objects are available on Pro and Enterprise plans only. On Plus, the 5-object cap covers standard objects like Companies, People, and Deals — with no room for custom objects. If your monday.com workspace has many custom boards that need separate objects in Attio, you'll need at minimum the Pro plan. (attio.com)

If email sync has already auto-created Person and Company records, Attio's documentation

If email sync has already auto-created Person and Company records, Attio's documentation recommends disabling mailbox sync, deleting those records, running Import2, then re-enabling sync. This is a destructive workflow — understand the implications before proceeding.

Backups are two-part on monday.com

The account export gives you boards and files, but not the Emails & Activities timeline. If activity history matters, extract it separately via API before cutover.

Pin your monday API version

Recent versions changed request formatting and Connect Boards response behavior. In API versions 2025-04 and later, the value field returns null for Connect Boards, Dependency, and Subtasks columns. Query linked_item_ids directly instead. Unpinned extraction code is risky. (developer.monday.com)

Attio doesn't automatically create referenced records

If you're asserting a Person with a relationship to a Company, the Company record must already exist. Always import in dependency order: Companies → People → Deals → List entries → Notes.

Do not migrate Mirror and Formula columns as authoritative data

They are derived values. Recompute them in Attio, or store as snapshot fields with a legacy_ prefix. monday.com's API returns null for formulas that depend on Mirror and Connect Boards columns in recent API versions. (developer.monday.com)

The runbook

Work top to bottom. Tick steps as you go — your progress is saved in this browser.

01 Discovery Decide what content deserves to move before you plan how to move it. 0/6

Objective A content inventory with a keep/rewrite/retire decision on every article and an agreed URL strategy.

  1. Inventory all content in monday.com

    Content lead 2-3 days

    Count articles, categories, attachments, images and embedded media, and pull page views and last-updated dates for each article. Usage data is what makes the next decision defensible rather than political.

    Data Profiler Get real record counts instead of estimating from memory
  2. Make a keep, rewrite or retire call on every article

    Content lead 1-2 weeks

    Most knowledge bases are half stale. Migrating everything imports the staleness and doubles the work; use views and last-updated to triage, and get the owning team to confirm. This usually removes 30-50% of scope.

    Migrating stale content is the most common knowledge-base migration mistake — it costs effort and actively degrades the new site.

  3. Agree the URL and redirect strategy

    SEO / web 2-3 days

    Decide the Attio URL structure and whether you can serve 301 redirects from the old paths. Public help centres carry real search traffic and inbound links; losing it is a measurable commercial impact.

    Without 301 redirects from old article URLs you lose accumulated search ranking and every external link and bookmark breaks.

  4. Map the information architecture

    Content lead 3-5 days

    Document the current category tree and design the target one, checking whether Attio supports your nesting depth. Deeply nested hierarchies frequently have to be flattened, which changes navigation for everyone.

  5. Confirm permissions, audiences and localisation scope

    Content lead 2-3 days

    Establish which content is public, internal or restricted, and how Attio models that. Then confirm how many locales you have and whether translation relationships between articles survive the move.

  6. Record count comparison

    Total records per object in monday.com vs. Attio.

monday.com → Attio specifics

Enterprise, >50K records, ongoing sync needed
Custom API with delta sync, or managed service
Attio already populated with email sync data
Custom API with assert endpoints — Import2 will create duplicates
One-time migration plus short coexistence
Bulk load with API, then iPaaS for deltas until final cutover

Don't move on until

  • Full content inventory with page views and last-updated dates
  • Keep / rewrite / retire decision recorded per article
  • URL and redirect strategy agreed with whoever owns SEO
02 Data Audit Audit the markup, the links and the assets — that is where KB migrations break. 0/9

Objective A content export with markup, internal links and every embedded asset accounted for.

  1. Export content and assess markup fidelity

    Content engineer 2-3 days

    Export articles in the richest format available and inspect what survived: tables, code blocks, callouts, nested lists, anchors and embedded video. Rich formatting is where fidelity is lost, and it is lost quietly.

    HTML-to-Markdown conversion routinely mangles nested lists, tables and code blocks. Inspect the output rather than trusting the converter.

    Data Profiler Profile the monday.com export for nulls, outliers and type drift
  2. Inventory every internal link and cross-reference

    Content engineer 2-3 days

    Extract all internal links, anchor links and article cross-references. These break by default: the target URL structure differs, so every internal link needs rewriting as part of the load, not afterwards.

    Internal links left pointing at old URLs turn the new knowledge base into a maze of 404s on day one.

  3. Inventory images, attachments and embedded media

    Content engineer 2 days

    List every asset with its URL, size and type, and confirm each still resolves. Assets hosted on the old platform's CDN will 404 the moment you decommission it, so they must be rehosted, not referenced.

    Images referenced from the source platform's CDN break when the old account closes. Download and rehost every asset.

  4. Find and fix broken links and orphans

    Content lead 2-3 days

    Crawl for existing broken internal and external links, and find articles no category links to. Fix them before migrating — a migration is a bad time to discover pre-existing rot.

  5. Check for PII and internal information in public content

    Compliance 1-2 days

    Scan for customer names, internal hostnames, credentials in code samples and screenshots containing real data. Republishing these on a public help centre is a disclosure, and screenshots are the usual culprit.

    PII & Compliance Scanner Find regulated fields before they land in a new system
  6. Normalise metadata

    Content engineer 1-2 days

    Standardise authors, tags, timestamps to UTC, and locale codes. Author mapping needs a decision for people who have left — attribution to a deleted user usually fails the import.

  7. Extract items with column values

    Paginate through each board using the GraphQL API with cursor pagination. Pin the API version header.

    CSV Validator Catch broken headers and ragged rows in the raw export
  8. Extract Connect Boards relationships

    For each item, resolve Connect Boards column values to get linked_item_ids.

  9. Extract Emails & Activities

    This data lives in the Emails & Activities app, not in standard board columns. The API is the only extraction path.

monday.com → Attio specifics

Accounts board
How many items? What columns? Any Connect Boards links to Contacts, Deals?
Contacts board
Email column populated? Linked to Accounts and Deals?
Leads board
Are Leads separate from Contacts or just a board group? What's the conversion workflow?
Deals board
How many pipeline stages? Are deal values stored in Number columns?
Activities board
This board is auto-created by the Emails & Activities app. What custom activity types exist?

Don't move on until

  • Content exported with markup fidelity assessed
  • Every internal link and asset reference inventoried
  • Broken links and missing assets fixed or logged
03 Field Mapping Map structure, metadata, permissions and — above all — URLs. 0/9

Objective A mapping covering article fields, taxonomy, permissions and a complete old-to-new URL map.

  1. Map the article schema

    Content engineer 2 days

    Map title, body, excerpt, author, dates, status, tags, SEO metadata and any custom properties. Confirm which fields Attio lets you set on import versus which it computes — computed dates are a common surprise.

    Schema Mapper Opens pre-loaded with the monday.com → Attio field pair
  2. Map the taxonomy and hierarchy

    Content lead 2-3 days

    Map categories, sections and tags to the target structure, resolving any nesting-depth limit explicitly. If you must flatten, decide how the lost level is preserved — usually as a tag or a title prefix.

    JSON to CSV Converter Flatten nested API responses into a reviewable sheet
  3. Map permissions and audience segmentation

    Content lead 2 days

    Map public, logged-in, and role-restricted visibility to Attio's model. Verify the mapping deliberately: internal content accidentally published publicly is the highest-severity failure in this whole category.

    Permission mapping errors publish internal documentation to the open web. Verify visibility on every restricted article after load.

  4. Build the complete old-to-new URL map

    SEO / web 2-3 days

    Produce a row per article mapping the old URL to the new one, then confirm exactly where the 301s will be served — Attio, a CDN, or your own web layer. Without this artifact the redirect step cannot be executed at all.

  5. Define the markup conversion and link-rewrite rules

    Content engineer 3-5 days

    Specify how each markup construct converts and how internal links are rewritten using the URL map. Write it as a repeatable transform, not manual edits — you will run it more than once.

    Data Format Converter Reshape the export into the format Attio's importer expects
  6. Plan localisation and freeze the spec

    Content lead 1-2 days

    Confirm how translated articles link to their source language in Attio, then version and sign off the mapping spec.

  7. Normalize fields

    Standardize phone formats (include country code), email casing, date formats (ISO 8601), domains (root domain only). Attio validates these strictly.

  8. Handle timezone conversions

    monday.com stores dates in UTC. If your Attio workspace uses a different timezone, convert date values explicitly during transformation to avoid off-by-one-day errors on close dates and activity timestamps.

  9. Map picklist values

    monday.com Status/Label values → Attio Select options. Standardize before loading — Attio can auto-create missing options during CSV import, but that's how you end up with three near-identical pipeline stages.

Don't move on until

  • Article schema and taxonomy mapped
  • Permission and audience model mapped to target equivalents
  • Complete URL map produced and redirect method confirmed
04 Test Migration Pilot the hardest articles, then read them. 0/6

Objective A pilot load whose formatting, links, assets and search all hold up under human review.

  1. Configure Attio with the agreed structure

    Content engineer 3-5 days

    Create the category tree, permission groups, locales and branding before loading. Articles loaded before their categories exist land uncategorised and have to be moved by hand.

  2. Pick the most difficult articles as the pilot

    Content lead 0.5 day

    Choose 20-50 articles for difficulty: the longest, the most heavily formatted, ones with tables and code blocks, deep internal linking, many images, embedded video, restricted visibility, and non-Latin scripts. Easy articles prove nothing.

  3. Run the conversion and load with link rewriting

    Content engineer 2-3 days

    Apply the markup conversion, rewrite internal links from the URL map, upload and re-reference assets, then load. Log every conversion warning rather than suppressing it.

  4. Read every pilot article side by side

    Content lead 2-3 days

    Open source and target together and compare rendering. This step is manual on purpose: no automated check catches a table that collapsed into a paragraph or a code block that lost its indentation.

  5. Click every link and load every asset

    Content engineer 1-2 days

    Verify each internal link resolves, each image loads from the new host, each attachment downloads and each embed plays. Assets still served from the old CDN are the defect that surfaces only after decommissioning.

    Migration Validation Tool Diff the pilot batch against source before scaling up
  6. Test search and permissions

    Content lead 1-2 days

    Search for known terms and confirm the right articles rank, then verify every restricted pilot article is invisible to an anonymous browser. Test permissions from a logged-out session, not an admin one.

Don't move on until

  • Complex articles render correctly with formatting intact
  • Every internal link and asset in the pilot resolves
  • Search returns sensible results for the pilot content
05 Cutover Publish, redirect, and keep the search traffic. 0/7

Objective All in-scope content live in Attio with redirects serving and search engines informed.

  1. Load the full content set ahead of the switch

    Content engineer 1-2 weeks

    Run the full conversion and load into Attio, unpublished or on a staging domain. Content migration differs from data migration here: you can stage the whole thing before anyone sees it.

  2. Publish the runbook with the redirect step first-class

    Project manager 1 day

    Sequence the freeze, final delta, publish, redirect activation, sitemap submission and link updates, with owners for each. Redirect activation is the step with lasting commercial consequences, so it gets explicit ownership.

  3. Freeze editing and migrate the delta

    Content lead 2-4 hours

    Stop editing in monday.com, then convert and load anything changed since the full load. Announce the freeze to every team that publishes — content teams are used to editing whenever they like.

  4. Publish and verify permissions live

    Content lead 2-4 hours

    Publish the content set, then immediately verify restricted articles are not publicly reachable using an anonymous session. Do this before announcing the new site, not after.

    Verify restricted content from a logged-out browser. An admin session will show you everything and tell you nothing.

    Migration Validation Tool Confirm the final delta landed before you reopen
  5. Activate 301 redirects and submit the sitemap

    SEO / web 2-4 hours

    Turn on the redirects from the URL map, then spot-check a sample of high-traffic old URLs and confirm each returns 301 to the right article. Submit the new sitemap and keep the old one reachable until search engines have recrawled.

    Redirect chains and redirect loops both leak ranking. Verify each redirect resolves in a single hop.

  6. Repoint in-product and support links

    Content lead 1-2 days

    Update help links embedded in your product, in support macros, in email templates and in onboarding material. These are the links your existing customers actually use, and they are easy to forget.

  7. Freeze source schema changes

    Stop teams from adding new columns, automations, or boards mid-project.

    Cron Expression Builder Schedule the delta syncs that run through the freeze

Don't move on until

  • All content loaded, categorised and correctly permissioned
  • 301 redirects live and verified from a sample of old URLs
  • Sitemap submitted and support links repointed
06 Validation Watch traffic, links and search rankings for weeks, not hours. 0/9

Objective Verified content completeness, healthy redirects, and search traffic recovered to baseline.

  1. Reconcile content counts and assets

    Content engineer 1-2 days

    Compare article counts by category and status, plus asset counts, against source. Confirm every article in the keep list is present and every retired one genuinely is not.

    Migration Validation Tool Reconcile monday.com and Attio record-for-record
  2. Crawl the new site for broken links and assets

    Content engineer 1-2 days

    Run a full crawl for 404s, broken images and missing attachments, and fix everything it finds. Repeat the crawl after the fixes rather than assuming they worked.

  3. Verify the redirects at scale

    SEO / web 1-2 days

    Test every mapped old URL for a single-hop 301 to the right destination. Chains and loops both leak ranking and are invisible unless you check the whole map, not a sample.

  4. Monitor organic traffic and rankings for four to eight weeks

    SEO / web 4-8 weeks

    Track organic sessions, impressions and rankings for your top articles against baseline. A dip in the first two weeks is normal; one that has not recovered by week six is a redirect or indexing problem to investigate.

    Do not decommission the old platform until search traffic has recovered — you may still need the old URLs to diagnose a ranking loss.

  5. Verify search, permissions and feedback loops

    Content lead 1-2 days

    Confirm on-site search returns good results for real queries, re-verify restricted content from a logged-out session, and check article feedback and analytics are collecting.

  6. Sign off and decommission on a delay

    Project sponsor 1 day

    Get acceptance against the Discovery criteria, keep monday.com available read-only until traffic has recovered, take a final export, and only then close the account.

  7. Rebuild automations

    monday.com automations don't transfer. Recreate critical workflows in Attio's workflow builder.

  8. Configure lists and views

    Set up pipeline lists, filtered views, and reporting dashboards in Attio to match your team's workflow.

  9. Monitor for 2 weeks

    Watch for duplicate records (email sync catching up), missing relationships, orphaned deals, and pipeline stage mismatches.

monday.com → Attio specifics

Field-level spot checks
Sample 5% of records, verify field values match.
Relationship validation
For sampled records, verify Company → People → Deal chains are intact.
Pipeline stage distribution
Compare deal stage counts between source and target.
Notes verification
Confirm notes are attached to the correct records.
Duplicate search
Search People by email, Companies by domain. Zero duplicates expected.

Don't move on until

  • Article counts reconciled and no broken links remain
  • Redirects returning 301 with no chains or loops
  • Organic traffic recovered to within tolerance of baseline

Field mapping reference

The field-by-field mapping for each object. Use this as the starting point for your mapping spec.

CRM Target 9 fields
monday.com fieldAttio fieldNotes
Accounts board (items) Companies (records) Map company name, domain, address, industry. Use domains as dedupe key.
Contacts board (items) People (records) Map name, email, phone, job title. Use email_addresses as dedupe key.
Leads board (items) People + Sales Pipeline List Leads become People records added to a pipeline list with a pre-qualified stage. Don't force every lead into Deals too early.
Deals board (items) Deals (records) on a Pipeline List Map deal name, value, stage, close date. Pipeline stages map to list status attributes.
Activities (Emails & Activities app) Notes + email sync Activity types (calls, meetings) → Notes. Email history → reconnect via Attio email sync. Attio's public docs don't document a bulk backfill of historical email events.
Custom boards Custom Objects or Lists Depends on whether the data is entity-level or workflow-level. Custom objects are Pro/Enterprise only.
Connect Boards links Relationship attributes Extract linked_item_ids from the API. Do not rely on the raw value field.
Mirror columns Recompute or snapshot Derived field — not a source of truth.
Formula columns Recompute or snapshot Derived field — especially risky when built on Mirror/Connect data.

Risk matrix

Per-object risk for this pair. Plan extra validation around anything marked high.

ObjectRiskNotes
Companies (Accounts) low Account records are relatively flat and map directly to Attio's Companies object, making field-level migration straightforward with standard column-to-attribute mapping.
Contacts (People) medium Contact records map to Attio's People object, but the risk increases when email sync has already created Person records in Attio, requiring deduplication or upsert logic via the API.
Deals high Deals must be migrated into Attio lists with stage attributes rather than as simple records, and pipeline stage history from monday.com's Status column groups does not have a direct import path.
Account-Contact-Deal Relationships high Connect Boards links export as plain text labels without machine-readable IDs, so the entire relationship graph must be reconstructed programmatically during the transformation phase.
Activities and Email History high The Emails & Activities timeline is excluded from all native export methods and requires API-level extraction with custom mapping to Attio's notes and communication intelligence model.
Custom Fields medium monday.com column types (Status, Dropdown, Mirror, Formula) must be individually mapped to Attio attribute types, with Mirror and Formula columns requiring recomputation or legacy snapshots.
Custom Objects (Custom Boards) high Custom boards require custom objects in Attio, which are only available on Pro and Enterprise plans and count toward strict per-plan object limits.
Pipeline Stages medium monday.com models pipeline stages as board groups or Status column values, while Attio uses list-level stage attributes, requiring structural remapping and potential loss of stage transition history.
Notes medium Import2 supports notes migration to Attio objects, but the CSV importer does not support notes at all, limiting options for teams using a code-free approach.
Subitems high monday.com subitems are excluded from CSV exports and their updates are not included in board exports, requiring dedicated API queries and a custom mapping strategy to represent them in Attio.

The hard parts

What makes this specific migration difficult, beyond the mechanics.

Board-to-Object Schema Translation

monday.com's per-board column definitions must be restructured into Attio's workspace-wide object attributes with enforced types, requiring a complete schema redesign rather than a direct field copy.

Relationship Chain Reconstruction

Connect Boards columns in monday.com are UI-level references that export as text labels, not IDs, so Account → Contact → Deal relationship chains must be programmatically rebuilt as typed relationship attributes in Attio.

Activity and Email History

monday.com's Emails & Activities timeline is excluded from both board-level CSV exports and account-level data exports, so migrating communication history requires API extraction and custom transformation.

Duplicate Risk with Email Sync

If Attio's mailbox sync has already auto-created Person and Company records, any import tool without upsert capability (including Import2) will generate duplicates that must be manually resolved.

Object and Record Plan Limits

Attio enforces strict object limits per plan (e.g., 5 on Plus, 12 on Pro), so monday.com workspaces with many custom boards may require a Pro or Enterprise plan to accommodate equivalent custom objects.

Mirror and Formula Column Handling

monday.com's API returns null for Connect Boards, Dependency, and Subtasks column values in recent API versions, meaning derived and mirror column data must be recomputed or snapshot-captured before migration.

Tools used in this playbook

All free, all run entirely in your browser — nothing is uploaded.

FAQ

Can I migrate monday.com data to Attio using CSV export?

You can, but CSV exports flatten Connect Boards relationships into plain text and exclude the Emails & Activities timeline entirely. monday.com board exports are capped at 10,000 items. CSVs work for small, flat datasets under 2,000 records where relationship preservation isn't required. For anything more complex, use the API or a managed service.

What are Attio's API rate limits for migration?

Attio enforces 100 read requests per second and 25 write requests per second, per workspace. Exceeding these returns HTTP 429 with a Retry-After header. List queries also use score-based rate limits on a 10-second sliding window. At 25 writes/sec, importing 50,000 records takes at minimum ~33 minutes of pure write time.

Does Import2 work for monday.com to Attio migration?

Import2 is free and handles standard objects (Companies, People, Deals, Notes), but it cannot import into Attio Lists, cannot upsert existing records, and will create duplicates if email sync has already populated your workspace. You must delete email-sync-created records before running Import2, or use the API with assert endpoints instead.

Can I export the Emails & Activities timeline from monday.com?

Not through native exports. monday.com's account export explicitly excludes the Emails & Activities timeline. The only way to extract email history, call logs, and activity data is through monday.com's GraphQL API. This is a key reason API-based migration is recommended over CSV.

How many custom objects does Attio support?

Attio limits total objects (standard + custom) by plan: 3 on Free, 5 on Plus, 12 on Pro, and unlimited on Enterprise. Custom objects are only available on Pro and Enterprise. Companies and People count toward total object limits, so plan your monday.com board-to-object mapping accordingly.

Or skip all of this and let us handle it

Book a 30-minute call and we'll scope your migration in a single session.