The Scenario
You are a product manager in your second week. Your predecessor set up a custom Attio object called "Feature Request" before leaving. It exists. It is empty. For eight months, feature requests have been tracked in an Excel workbook — 50 rows with request title, priority, and the customer's company domain.
Sprint planning is Friday. The engineering lead asked you to come with requests organized in Attio so the team can triage them from the CRM. You have until Friday morning.
You open Attio and look at the Feature Request object. You click New Record. You fill in the title. You set the priority. You search for the company by domain to link it. You save. You open the workbook and move to row 2.
After the third record you stop and reconsider.
The bad version:
- Create all 50 records by hand, one at a time through the Attio UI, over the rest of the afternoon.
- Find out if there's a CSV import path for custom objects — discover it exists but doesn't support relationship fields, so you'd still have to link each record to its company manually afterward.
- Ask the ops team to write a script. Get told it won't happen before Friday.
The workbook is organized. The object is ready. The data just needs to cross the gap.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent that lives inside your Excel workbook. Through its built-in Attio integration it reads each row, creates a record in the Feature Request custom object, resolves the company by domain, links the record, and writes the new record ID back.
Read every row in my Excel sheet and create a record in the Attio object 'project' with name from column A, status from column B, and owner email from column C; log the record ID in column D.
What You Get
- Column D fills with the Attio record ID for each new Feature Request record.
- Each record is linked to its associated company via the domain lookup.
- Rows where no company matched the domain show 'company not found' in column D.
- Priority and title land in the correct custom attribute fields.
What If the Data Is Not Quite Ready
Priority values use inconsistent freeform text
"High priority", "urgent", "P1" — all meaning the same tier.
Normalize each priority value in column B to one of: Critical, High, Medium, Low; then create a record in the Attio 'feature_request' object for each row with title from column A and normalized priority; link to the company by domain in column C; write the record ID in column D.
Some rows have no company domain
For each row, create an Attio 'feature_request' record with title and priority from columns A and B; if column C has a domain, link to the matching company; if column C is empty, create without a company link and note 'no company linked' in column D alongside the record ID.
You want to set a target quarter attribute alongside title and priority
For each row, create an Attio 'feature_request' record with title from column A, priority from column B, and target_quarter from column E; link to the company by domain in column C; write the record ID in column D.
Normalize priorities, validate domains, set all attributes, and create in one pass
Normalize priority values in column B to Critical/High/Medium/Low. Validate domain format in column C. For valid rows, create an Attio 'feature_request' record with title, normalized priority, and target_quarter; link the company by domain; write the record ID in column D. Flag rows with domain issues as 'domain issue'.
Try It
Get the 7-day free trial of SheetXAI and open any Excel workbook with data you need to move into a custom Attio object, then ask it to run the import. The Attio integration is included in every SheetXAI plan. See also the spoke on bulk-importing company records, or the hub for a full overview of Attio integration methods.
