InsightHireHelp Center

Indeed

Indeed email apply parsing, Apply API status, and compliance considerations for job board sourcing.

Indeed is a primary sourcing channel for InsightHire customers. Today the production path is email apply parsing — each position receives a unique inbound address and Indeed application notification emails are parsed into candidates automatically. A full Indeed Apply API integration exists in the codebase but is not the default customer-facing catalog entry.

Two integration paths

PathStatusHow it works
Email apply (primary)ProductionPer-position address on in.insighthire.com; Mailgun inbound webhook parses Indeed emails
Apply API + OAuthAvailable in API/UI; catalog disabled at platform levelOAuth employer access, job sync, application pull, results post-back

Platform admin note: the indeed slug in platform_integration_settings is intentionally enabled: false because email apply covers most customers today. The Apply API UI remains at /dashboard/integrations/indeed for early adopters.

How addressing works

Each open position gets a unique token:

pos_{12-char-nanoid}@in.insighthire.com
  • Token stored as positions.inboundEmailToken.
  • Domain configurable via INBOUND_EMAIL_DOMAIN (default in.insighthire.com).
  • Visible on the position detail page for recruiters configuring Indeed job posts.

Because the To address encodes the position, InsightHire knows which role the candidate applied to — no fuzzy job-title matching.

Indeed job post setup

When posting on Indeed:

  1. Copy the position's Indeed apply email from InsightHire.
  2. In Indeed Employer, set Application delivery method to Email.
  3. Paste the InsightHire inbound address as the application email.
  4. Publish the job.

When a candidate applies, Indeed sends a notification email to that address.

Email parsing pipeline

Inbound mail hits the API inbound handler → inbound-email.service.ts:

  1. Source detection — sender/subject/body patterns (indeed.com, @indeedemail.com, etc.).
  2. Indeed parserindeed-parser.service.ts extracts:
    • Candidate name, email, phone
    • Job title (for logging)
    • Resume attachment (PDF)
    • Indeed application URL and candidate ID when present
  3. Resume handling — PDF uploaded to S3; optional text extraction for contact info.
  4. Indeed resume fetcher — supplementary resume retrieval when email link available.
  5. Candidate creation — profile + application with source INDEED; journey invite sent if configured.

Parse confidence is scored 0–100. Low-confidence parses are logged for ops review.

Supported email sources

The inbound parser also recognizes (with lower priority than dedicated integrations):

  • LinkedIn notification forwards
  • ZipRecruiter
  • Glassdoor
  • Manual recruiter forwards

Indeed-sourced applications are tagged with externalSource: INDEED.

Duplicate and edge handling

OutcomeBehavior
CANDIDATE_CREATEDNew profile + application + optional journey session
DUPLICATESame email + position within dedup window
POSITION_INACTIVEEmail acknowledged; no candidate created
IGNOREDNon-application mail or failed parse
FAILEDLogged in inbound email logs for platform admin review

Apply API path (advanced)

For employers with Indeed Developer / Employer API access:

Settings path

/dashboard/integrations/indeed

Configuration fields

FieldPurpose
Client ID + Client SecretOAuth employer credentials
Employer IDIndeed employer account identifier
Webhook secretVerify inbound Apply webhooks (optional)

Stored in ats_integrations with platform INDEED. API key field encodes clientId:clientSecret.

OAuth scopes

employer_access manage_candidates read_applications

Authorization URL: https://secure.indeed.com/oauth/v2/authorize

Token exchange: https://apis.indeed.com/oauth/v2/tokens

API operations

ProcedurePurpose
ats.indeed.syncJobsPull Indeed postings → create/update positions
ats.indeed.syncApplicationsPull applications → create candidates
ats.indeed.getJobsList Indeed jobs for mapping UI
ats.indeed.syncStatsSync health metrics
ats.indeed.postResultsPush journey results back to Indeed
ats.indeed.testConnectionVerify API credentials

Requires Professional+ subscription (enforceATSAccess).

Apply API status

CapabilityEmail applyApply API
Application import✅ Production✅ When credentialed
Job sync❌ Manual postsyncJobs
Results post-backpostResults
Webhook push❌ (email pull)✅ With webhook secret
Platform catalogN/A (always on via email)Hidden (enabled: false)

Contact InsightHire support or Indeed partner team to enable Apply API for your employer account.

Compliance

  • Indeed applications contain PII (name, email, phone, resume). InsightHire stores these under the org's tenant with standard retention and export controls.
  • Resume files land in org-scoped S3 prefixes: organizations/{orgId}/candidates/{candidateId}/resume/.
  • Journey invites sent after apply must comply with your organization's messaging and consent policies.

EEO and sourcing attribution

  • Source is recorded as INDEED (or INDEED_SPONSORED when detected in API path) for analytics and compliance reporting.
  • Use Settings → Compliance (when DEI module enabled) for adverse impact and source reporting — Indeed applies flow into the same candidate pipeline as careers-page applies.

Email security

  • Inbound domain (in.insighthire.com) is operated by InsightHire; only position-scoped tokens route mail to the correct tenant.
  • Do not share one position email across multiple Indeed jobs — each role should have its own token for accurate attribution.

Indeed employer policies

  • Follow Indeed Employer Guidelines for job content, apply methods, and candidate communication.
  • Email apply must use the address Indeed sends applications to — do not intercept or modify candidate submissions outside Indeed's flow.

Troubleshooting

SymptomCheck
No candidate after Indeed applyVerify correct inbound email on Indeed post; confirm position is OPEN
Wrong positionEach job needs its own pos_*@in.insighthire.com address
Missing resumeIndeed email may lack attachment; check inbound email logs
Apply API sync failsVerify OAuth credentials and employer ID; confirm Professional+ plan
Duplicate candidatesExpected if candidate reapplies; dedup uses email + position