The Scenario
It's the first week of the quarter and you're building the LP update deck. You need a Google Sheet with every one of your 340 portfolio companies — ARR, stage, assigned partner, last-touch date — to feed the dashboard charts and the table your LP coordinator pastes into the slide template.
The bad version:
- Open Affinity, navigate to the portfolio companies list, and start exporting — only to find the CSV doesn't include your custom fields like ARR or Stage, just the base entity data.
- Manually open each company record, copy the custom field values, and paste them into the sheet one row at a time. You're 40 rows in after 25 minutes.
- Realize the stage values use slightly different labels than what's in the sheet from last quarter and spend another 20 minutes normalizing the text before the charts will render correctly.
The LP update goes out next Friday. Spending three hours on data extraction is three hours you're not spending on the commentary that actually matters.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent that lives inside your Google Sheet. It reads your sheet, understands the structure, and through its built-in Affinity integration it can pull list data — including custom fields — directly into your columns. No field ID lookups, no CSV patching.
Pull all companies from my Affinity deal list including custom fields like ARR and stage and put them in this sheet starting at row 2, one company per row with columns for company name, ARR, stage, assigned partner, and last-touch date
What You Get
- One row per portfolio company starting at row 2.
- Columns populated: company name in A, ARR in B, stage in C, assigned partner in D, last-touch date in E.
- Custom field values pulled directly from Affinity's list entry data — not just the base entity fields.
- Any company missing a custom field value gets a blank cell rather than an error, so your chart references don't break.
What If the Data Is Not Quite Ready
The stage labels in Affinity don't match what your sheet expects
Pull all companies from my Affinity portfolio list into this sheet and remap the stage values as follows: "Active" → "Portfolio", "Exited" → "Realized", "Written Off" → "Written Off" — keep any unlisted stage values as-is
Some companies are missing ARR values in Affinity
Pull all companies from my Affinity portfolio list and put them in this sheet. For any company where ARR is blank, put "TBD" in column B instead of leaving it empty
You need to join data from two different Affinity lists
Pull companies from my 'Portfolio — Active' list in Affinity into rows 2 through 200 of this sheet, then pull companies from my 'Portfolio — Watch List' list into rows below that, adding a column that labels which list each company came from
Full kill-chain: normalize stage labels, fill missing ARR, flag incomplete rows, then write to the sheet
Pull all companies from my Affinity portfolio list into this sheet. Remap stage values to the standard labels in row 1. Replace blank ARR values with 0. Add a "Complete" column that marks TRUE if both ARR and stage are populated. Sort by ARR descending before writing.
The pattern is to ask for the cleanup and the pull in the same prompt — SheetXAI handles the conditional logic before writing a single row.
Try It
Get the 7-day free trial of SheetXAI and open your LP dashboard sheet, then ask it to pull your Affinity portfolio companies with the custom fields you need. If you're also tracking deal activity, see Export Open Opportunities From Affinity Into a Google Sheet or the full Affinity integration overview.
