Marketing

What Happens When LinkedIn Enrichment Fails — and How to Handle It in Google Sheets

The four types of enrichment outcomes, what the add-on writes to your sheet for each, how to read and filter results, and how to build a re-enrichment queue for not-found rows.

By Makeinfo Team
#linkedin-enrichment #error-handling #google-sheets #datagma #leadmagic

Enrichment doesn’t always succeed. A LinkedIn URL you were confident about comes back empty. An API error interrupts the run halfway through. A row that should have a result doesn’t.

How you handle those outcomes determines whether a failed enrichment run is recoverable or wasted. Here’s how the LinkedIn Enricher add-on surfaces each outcome — and what to do with each one.


The Four Types of Enrichment Outcomes

Every row in your enrichment run ends in one of four states:

OutcomeWhat it meansWhat the add-on writes
FoundA provider returned email (and optionally phone)Email, phone, provider name, timestamp
Not foundBoth providers checked, no result in databaseEmpty email/phone, “not found” status, timestamp
API errorThe API call failed (bad key, bad URL, provider down)Error message in status column
Rate limitedToo many requests sent in a short periodRate limit error in status column

The status column and timestamp column are what make these states actionable after the run.


Reading Your Results After a Run

After enrichment completes, your sheet should look approximately like this:

LinkedIn URLEmailPhoneProviderTimestampNotes
linkedin.com/in/jane-doe[email protected]+1-555-0192Datagma2026-04-13 09:14
linkedin.com/in/john-smith[email protected]LeadMagic2026-04-13 09:14
linkedin.com/in/sarah-jones2026-04-13 09:15not found
linkedin.com/in/bad-url-here2026-04-13 09:15invalid URL format
linkedin.com/in/alex-chen2026-04-13 09:16rate limit — retry

Filtering workflow:

  1. Filter the Notes/Status column for “not found” → these are your re-enrichment queue
  2. Filter for “invalid URL” → fix the URLs, these didn’t even hit the API
  3. Filter for “rate limit” → re-run these rows after a delay
  4. Filter for “API error” → investigate (usually an API key or provider issue)

The “Not Found” Case: What to Do Next

A “not found” result means both providers checked their databases and found no match. This is not an error — it’s a real data gap.

Before giving up on a not-found row, consider:

1. Check the URL format. The most common reason for unexpected “not found” results is a malformed LinkedIn URL. Valid format: https://www.linkedin.com/in/username. Invalid: company pages (/company/), Sales Navigator URLs (/sales/), or shortened links.

2. Check if the profile is still active. Deleted or suspended LinkedIn profiles don’t exist in the database. Open the URL manually to confirm the profile is live.

3. Try again in 60 days. Provider databases are updated continuously. A profile added recently may not be indexed yet. Scheduling a re-enrichment pass 60 days later often recovers some percentage of initial not-founds.

4. Accept the gap and work around it. Some contacts genuinely aren’t in any enrichment database. For high-value contacts in this category, manual research is the only option: company website contact pages, email pattern guessing + verification, LinkedIn InMail.


The API Error Case

API errors are different from not-found results — they mean the API call itself failed before the provider could even check their database.

Common causes:

Error typeLikely causeFix
401 UnauthorizedInvalid or expired API keyRe-enter your API key in the Settings tab
403 ForbiddenAPI key doesn’t have permission for this endpointCheck your plan with the provider
422 UnprocessableMalformed LinkedIn URL sent to APIClean up the URL format in your sheet
429 Too Many RequestsRate limit exceededSlow down the run; see rate limit section below
500 Server ErrorProvider API is experiencing issuesWait and retry; check provider status page
TimeoutNetwork or provider latency issueRetry; usually transient

To diagnose: check the error message in the status column. Check that the API key in the Settings tab is current and active by clicking “Test Connection.” If the key tests successfully but errors persist on specific rows, the issue is URL format.


Rate Limit Errors

Providers limit how many API calls you can make within a time window. Limits vary by provider and plan tier, but a typical pattern is:

ProviderRate limit (approximate)
Datagma10–30 requests/second depending on plan
LeadMagic5–15 requests/second depending on plan

The LinkedIn Enricher add-on batches requests to stay within safe limits, but very large runs (500+ rows) can occasionally trigger rate limit responses from the provider.

If you see rate limit errors:

  1. Stop the current run
  2. Wait 5–10 minutes for the rate limit window to reset
  3. Filter the sheet for rows that show “rate limit” in the status column
  4. Re-run the enrichment with those rows only (enable “Skip already-enriched rows” so you don’t re-process successful rows)

For very large lists, consider splitting the enrichment into batches of 200–300 rows processed at different times of day.


How the Timestamp Column Helps You Manage Re-Enrichment

The timestamp written to each row after enrichment serves two purposes:

1. Audit trail. You can see exactly when each row was enriched, and which provider was used. If an email bounces weeks later, you can check when the enrichment ran and how old the data was.

2. Re-enrichment scheduling. Email data decays as people change jobs. For B2B contacts, plan to re-enrich found rows every 90–120 days and not-found rows every 60 days (since the provider database may have caught up).

Google Sheets formula to flag rows due for re-enrichment:

=IF(
  AND(
    D2<>"",
    TODAY()-DATEVALUE(TEXT(D2, "YYYY-MM-DD")) > 90
  ),
  "Re-enrich",
  "OK"
)

Replace D2 with your timestamp column. This flags any enriched row where the timestamp is older than 90 days. Filter for “Re-enrich” to get your re-enrichment queue.

For not-found rows (empty email, timestamp present), use 60 days instead of 90:

=IF(
  AND(
    B2="",
    D2<>"",
    TODAY()-DATEVALUE(TEXT(D2, "YYYY-MM-DD")) > 60
  ),
  "Retry enrichment",
  ""
)

Building a Re-Enrichment Queue

For lists you enrich repeatedly (ongoing prospecting, recruiter candidate pools, CRM backfill projects), a structured re-enrichment queue saves significant time.

Simple queue setup in Google Sheets:

  1. Add a helper column with one of the formulas above
  2. Create a named filter view: “Re-enrich due” — shows only rows flagged for re-enrichment
  3. When you run a new enrichment session, activate the filter view first → copy those rows to a new sheet → run enrichment on that sheet → paste results back

Alternatively, the “Skip already-enriched rows” option handles this automatically if you re-run the full sheet: it skips rows with existing emails and only processes the flagged rows. The formula above is useful when you want a count of how many rows are due before committing the credits.


Not Found Is Not the End

A 70% hit rate on a 500-row list leaves 150 not-found rows. That’s 150 rows you might otherwise write off.

In practice:

  • 60-day re-enrichment recovers ~15–20% of initial not-founds (provider database updates)
  • URL format fixes recover another 5–10% of what appeared to be not-founds
  • Manual research closes the gap on the highest-value contacts

The status logging and timestamp system makes all of this manageable without rebuilding your workflow from scratch each time.


Build a self-managing enrichment queue in your Google Sheet. LinkedIn Profile Enricher for Google Sheets →