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.
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:
| Outcome | What it means | What the add-on writes |
|---|---|---|
| Found | A provider returned email (and optionally phone) | Email, phone, provider name, timestamp |
| Not found | Both providers checked, no result in database | Empty email/phone, “not found” status, timestamp |
| API error | The API call failed (bad key, bad URL, provider down) | Error message in status column |
| Rate limited | Too many requests sent in a short period | Rate 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 URL | Phone | Provider | Timestamp | Notes | |
|---|---|---|---|---|---|
| linkedin.com/in/jane-doe | [email protected] | +1-555-0192 | Datagma | 2026-04-13 09:14 | |
| linkedin.com/in/john-smith | [email protected] | LeadMagic | 2026-04-13 09:14 | ||
| linkedin.com/in/sarah-jones | 2026-04-13 09:15 | not found | |||
| linkedin.com/in/bad-url-here | 2026-04-13 09:15 | invalid URL format | |||
| linkedin.com/in/alex-chen | 2026-04-13 09:16 | rate limit — retry |
Filtering workflow:
- Filter the Notes/Status column for “not found” → these are your re-enrichment queue
- Filter for “invalid URL” → fix the URLs, these didn’t even hit the API
- Filter for “rate limit” → re-run these rows after a delay
- 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 type | Likely cause | Fix |
|---|---|---|
| 401 Unauthorized | Invalid or expired API key | Re-enter your API key in the Settings tab |
| 403 Forbidden | API key doesn’t have permission for this endpoint | Check your plan with the provider |
| 422 Unprocessable | Malformed LinkedIn URL sent to API | Clean up the URL format in your sheet |
| 429 Too Many Requests | Rate limit exceeded | Slow down the run; see rate limit section below |
| 500 Server Error | Provider API is experiencing issues | Wait and retry; check provider status page |
| Timeout | Network or provider latency issue | Retry; 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:
| Provider | Rate limit (approximate) |
|---|---|
| Datagma | 10–30 requests/second depending on plan |
| LeadMagic | 5–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:
- Stop the current run
- Wait 5–10 minutes for the rate limit window to reset
- Filter the sheet for rows that show “rate limit” in the status column
- 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:
- Add a helper column with one of the formulas above
- Create a named filter view: “Re-enrich due” — shows only rows flagged for re-enrichment
- 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 →