BlogHow-to

How to automate the spreadsheet work between your apps

Directories into rows, messy lists merged clean, missing columns filled from the web. Three copyable asks that automate spreadsheet data entry.

Every app you use exports. None of them agree on columns. So the spreadsheet becomes the place where your tools finally meet, and you become the integration that connects them, one paste at a time.

Nobody puts this on a job description, but it is a real job with real hours: rows keyed in from a directory, gaps filled by visiting websites one by one, two half-overlapping lists merged by eye, and a reconciliation at month end to find out what drifted.

You are the integration

Name the loop honestly. Export from one system. Paste into the sheet. Fix the columns. Dedupe by squinting. Then go enrich the missing cells one website at a time, like a paper route.

The work takes vigilance rather than skill, and vigilance erodes by row 300. The mistakes are quiet ones: the paste that shifted a column, the duplicate with two spellings, the cell you guessed at 5pm and forgot you guessed. Quiet mistakes surface weeks later, in front of someone.

The other cost is staleness. Because the manual version hurts, it happens rarely, so the sheet everyone relies on is usually weeks behind the tools it is supposed to summarize.

Hand the sheet work off

In Agent FM, you name the source, the destination sheet, and the rules: what a row looks like, what to dedupe on, what to do when sources disagree. It pages through the whole source, writes clean rows, logs conflicts instead of overwriting them, and leaves a blank rather than inventing a value. Back come counts and flags, so you audit the exceptions instead of re-checking everything. If the source sits behind a login, it works in your logins, the same way you would.

Directories are the classic. One ask, one clean sheet, every listing, no page-two amnesia. It reads every page, including the ones behind the Next button nobody clicks.

Pull every listing from [directory, e.g. the Boise Chamber of Commerce member directory] into a sheet. One row per business: name, category, phone, address, website, and email if listed. Page through the whole directory, don't stop at the first page, and dedupe on name plus address. Tell me the final row count and flag any pages that wouldn't load.
Use caseTurn a directory into a clean sheet of rowsPull every listing from [directory] into a sheet: name, phone, address, website.View →

Enrichment is the slowest manual job in this category, because filling missing columns means visiting every company individually. Hand over the sheet and the rule about disagreements, then review the conflicts it logged instead of doing the tour yourself.

Enrich [sheet, e.g. the Accounts tab of the CRM cleanup sheet]. For each row with gaps, visit the company website and LinkedIn page and fill in industry, headcount range, city, and the one line description column. Where sources disagree, prefer the company's own site and note the conflict in the notes column. Don't guess, leave a cell blank over inventing a value. Tell me how many rows you completed and list the companies you couldn't verify.
Use caseEnrich the accounts sheet by visiting every websiteFill the missing columns in [sheet] by visiting each company's site and LinkedIn page.View →

Merging two messy lists is where dedupe-by-eye goes to die. This ask normalizes first, merges second, and shows its work on a tab you can inspect. Nothing gets silently collapsed; every merge decision is on the record.

Merge [list A, e.g. the conference badge scans] and [list B, e.g. the webinar signups export] into one tracker. Normalize the columns first: one name format, one phone format, lowercase emails, city and state split out. Dedupe on email, and where the same person appears twice with different details, keep the newer row and log the conflict on a Dupes tab. Tell me the final row count, the dupes collapsed, and flag any rows too broken to place.
Use caseMerge two messy lists into one clean trackerMerge [list A] and [list B] into one deduped tracker with normalized columns.View →

What makes a sheet ask reliable?

Four rules, each one sentence in the ask. Name the dedupe key, because deduping on the wrong column merges two different people named Kim. Say what a finished row looks like, column by column. Decide the disagreement policy up front: prefer the primary source, log the conflict. And ban guessing explicitly, because a blank cell is recoverable and an invented one is a small landmine with your initials on it.

Asks written this way come back auditable. Every flag explains itself, the report reads like a handover note instead of a mystery, and repeat runs stay safe because the ask is the spec.

Control, cell by cell

It edits the sheet you named and nothing else. Conflicts land in a notes column, dupes on their own tab, and the report lists what could not be verified, so trust is checkable rather than assumed. Watch the rows land live the first time; skim the flags every time after.

When the sheet work repeats

Some of this is one-off. The rest arrives on a clock: the weekly export to log, the tracker that has to be current by Friday, the monthly reconcile. Anything you have handed off once can run on a schedule, Routine · Fridays 4pm, and the sheet stays current with no calendar reminder involved. The reconcile earns a monthly slot the same way. More on that in Routines that run themselves.

And when the busywork lives in the files themselves rather than between apps, the same grammar applies. See also: Your busywork lives in files too.

The spreadsheet was supposed to be the tool, not the second shift. Describe the rows you want and let the pasting happen without you. Get early access on macOS or Windows; when access opens, make the ugliest spreadsheet your first handoff.

Related