Job Search by ZipRecruiter icon

ZipRecruiter Job Search data API

ZipRecruiter, Inc. · Jobs & Careers

Job Search by ZipRecruiter is ZipRecruiter, Inc.'s Android client for the US hiring market: seekers search openings by keyword and location, read full job descriptions with pay bands, apply in one tap with ZipApply, save listings into My Jobs and answer recruiter messages from the inbox.

As a data source the app exposes the US vacancy market as structured records: job cards carrying listingKey, title, pay, benefits, company and location, seeker profiles with headline, skills, resumeTemporaryUrl and minimumAnnualDesiredPay, plus saved-search alerts with radiusMiles and remoteBehavior. Integrators build ATS match ranking, ZipApply profile-completeness checks and recruiter-inbox SLA tracking on top of it.

Job Search by ZipRecruiter (package com.ziprecruiter.android.release, version 26.12.0) is ZipRecruiter, Inc.'s Android client for the US job market, where seekers search openings, apply in one tap with ZipApply, save jobs and answer recruiter messages. Behind those screens sits a dataset of job listings with pay bands and benefits, seeker profiles with resumes, skills and desired salary, plus applications, saved searches and match alerts. That data feeds ATS match-ranking pipelines, profile-completeness checks and alert-response analytics for recruiting integrations.

Screenshots

  • Job Search by ZipRecruiter screenshot 1
  • Job Search by ZipRecruiter screenshot 2
  • Job Search by ZipRecruiter screenshot 3
  • Job Search by ZipRecruiter screenshot 4
  • Job Search by ZipRecruiter screenshot 5
  • Job Search by ZipRecruiter screenshot 6
  • Job Search by ZipRecruiter screenshot 7

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Register device

    POST /v1/device/register opendata

    Registers the handset at startup and returns encryptedDeviceId plus an inferred country and lat/lng used for anonymous job search.

    Auth: No session cookie. HMAC request-signing headers; body is a string map of device attributes.

    • encryptedDeviceId
    • location
    • inferredCountryCode
    • inferredLatitude
    • inferredLongitude
    POST /v1/device/register HTTP/1.1
    Content-Type: application/json
    X-Request-Signature: <hmac-signature>
    
    {
      "platform": "android",
      "appVersion": "26.12.0",
      "pushToken": "fcm-token-example"
    }
    {
      "device": {"encryptedDeviceId": "enc_dev_9f2a1c"},
      "location": "Austin, TX",
      "inferredCountryCode": "US",
      "inferredLatitude": 30.2672,
      "inferredLongitude": -97.7431
    }
    • Reconstructed from the anonymous-startup device registration flow and the inferred-location welcome screen
  • Sign in contact

    POST /v1/auth/signin opendata

    Signs the job seeker in (email OTP, password or Google) and returns the Contact card plus a session cookie used on later calls.

    Auth: HMAC request-signing headers. The response session cookie is stored on the device and attached on later signed-in calls.

    • success
    • isLoggedIn
    • isNew
    • statusCode
    • contactId
    • emailAddress
    • name
    • phoneNumber
    • zipCode
    • desiredSalary
    • headline
    • inResumeDatabase
    • resumeId
    POST /v1/auth/signin HTTP/1.1
    Content-Type: application/json
    X-Request-Signature: <hmac-signature>
    
    {
      "email": "[email protected]",
      "token": "otp-or-google-id-token",
      "source": "android"
    }
    {
      "success": true,
      "isLoggedIn": true,
      "isNew": false,
      "statusCode": 200,
      "contact": {
        "contactId": "c_4412891",
        "emailAddress": "[email protected]",
        "name": "Alex Rivera",
        "phoneNumber": "+15125550123",
        "zipCode": "78701",
        "desiredSalary": "140000",
        "headline": "Staff Product Manager",
        "inResumeDatabase": true,
        "resumeId": "r_88ab"
      }
    }
    • Reconstructed from the email sign-in screen and the account card it returns
  • Send login OTP

    POST /v1/auth/otp/email opendata

    Emails a one-time password for the job-seeker login/registration flow.

    Auth: HMAC request-signing headers. No session cookie required.

    • email
    • status
    • errorMessage
    POST /v1/auth/otp/email HTTP/1.1
    Content-Type: application/json
    X-Request-Signature: <hmac-signature>
    
    {
      "email": "[email protected]"
    }
    {
      "status": "OTP_SENT",
      "errorMessage": ""
    }
    • Reconstructed from the email one-time-code login flow
  • Validate OTP and register

    POST /v1/auth/otp/validate opendata

    Confirms the emailed OTP and returns contactId, credentialUpdateId and ptid that bind the session to a job-seeker account.

    Auth: HMAC request-signing headers. A successful response issues contactId and ptid used as the signed-in identity.

    • email
    • oneTimePassword
    • listingKey
    • source
    • explicitOptIn
    • status
    • errorMessage
    • contactId
    • credentialUpdateId
    • ptid
    POST /v1/auth/otp/validate HTTP/1.1
    Content-Type: application/json
    X-Request-Signature: <hmac-signature>
    
    {
      "email": "[email protected]",
      "oneTimePassword": "482913",
      "listingKey": "",
      "source": "android",
      "explicitOptIn": true
    }
    {
      "status": "OK",
      "errorMessage": "",
      "contactId": "c_4412891",
      "credentialUpdateId": "cred_19",
      "ptid": "pt_7f3a"
    }
    • Reconstructed from the one-time-code confirmation screen that creates the seeker account
  • List job keys

    POST /v1/feed/listing-keys opendata

    Pages the search/home job feed as JobKey records (listingKey, matchId) plus totalListings, before cards are hydrated.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • placementId
    • engine
    • limit
    • offset
    • impressionLotId
    • ptid
    • contactId
    • jobKeys
    • listingKey
    • matchId
    • sourcePlacementId
    • totalListings
    • continueToken
    POST /v1/feed/listing-keys HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "req": {
        "placementId": 12,
        "engine": "match-v2",
        "limit": 20,
        "offset": 0,
        "impressionLotId": "lot_aa12",
        "ptid": "pt_7f3a",
        "contactId": "4412891"
      }
    }
    {
      "rsp": {
        "jobKeys": [{
          "listingKey": "jk_9c2e1b",
          "matchId": "m_4412",
          "sourcePlacementId": 12
        }],
        "totalListings": 1842
      },
      "impressionLotId": "lot_aa12",
      "continueToken": "ct_next_20"
    }
    • Reconstructed from the paginated home and search feed that lists matching jobs
  • Hydrate job cards

    POST /v1/feed/cards opendata

    Turns listing keys into feed cards with title, pay, benefits, company, location and saved state for the search and home lists.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • jobKeys
    • placementId
    • impressionLotId
    • contactId
    • jobCards
    • matchId
    • listingKey
    • title
    • status
    • pay
    • benefits
    • employmentTypes
    • locationTypes
    • company
    • shortDescription
    • saved
    • companyLogo
    • location
    • isNew
    POST /v1/feed/cards HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "req": {
        "jobKeys": [{"listingKey": "jk_9c2e1b", "matchId": "m_4412"}],
        "placementId": 12,
        "impressionLotId": "lot_aa12",
        "ptid": "pt_7f3a",
        "contactId": "4412891"
      }
    }
    {
      "rsp": {
        "jobCards": [{
          "matchId": "m_4412",
          "listingKey": "jk_9c2e1b",
          "title": "Staff Product Manager",
          "status": "ACTIVE",
          "pay": "$140,000 - $180,000 a year",
          "benefits": ["Health", "401k"],
          "employmentTypes": ["FULL_TIME"],
          "locationTypes": ["HYBRID"],
          "company": "Example Corp",
          "shortDescription": "Own the job-seeker home feed.",
          "saved": false,
          "companyLogo": "https://example.com/logo.png",
          "location": "Austin, TX",
          "isNew": true
        }]
      }
    }
    • Reconstructed from the job-card list that shows title, pay, company and location
  • Get job details

    POST /v1/listings/details opendata

    Loads the job-details screen: full HTML description, pay, benefits, company widget and share URLs for a listingKey.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • jobKey
    • listingKey
    • matchId
    • placementId
    • contactId
    • jobDetails
    • title
    • status
    • pay
    • benefits
    • employmentTypes
    • company
    • htmlFullDescription
    • saved
    • location
    • companyLogoUrl
    • shareUrls
    • facebookUrl
    • linkedinUrl
    • shortUrl
    POST /v1/listings/details HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "req": {
        "jobKey": {"listingKey": "jk_9c2e1b", "matchId": "m_4412"},
        "placementId": 12,
        "impressionLotId": "lot_aa12",
        "ptid": "pt_7f3a",
        "contactId": "4412891"
      }
    }
    {
      "rsp": {
        "jobDetails": {
          "listingKey": "jk_9c2e1b",
          "title": "Staff Product Manager",
          "status": "ACTIVE",
          "pay": "$140,000 - $180,000 a year",
          "benefits": ["Health", "401k"],
          "employmentTypes": ["FULL_TIME"],
          "company": "Example Corp",
          "htmlFullDescription": "<p>Own the job-seeker home feed.</p>",
          "saved": false,
          "companyWidget": {"name": "Example Corp"},
          "location": "Austin, TX",
          "companyLogoUrl": "https://example.com/logo.png",
          "shareUrls": {
            "facebookUrl": "https://example.com/share/facebook",
            "linkedinUrl": "https://example.com/share/linkedin",
            "twitterUrl": "https://example.com/share/twitter",
            "emailUrl": "mailto:?subject=Staff%20Product%20Manager",
            "shortUrl": "https://example.com/j/jk_9c2e1b"
          },
          "matchId": "m_4412"
        }
      }
    }
    • Reconstructed from the job-details screen with the full description and share links
  • Save job

    POST /v1/lists/saved/add opendata

    Bookmarks a listing on the signed-in seeker's saved-jobs list (My Jobs).

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • ptid
    • contactId
    • listingKey
    • placementId
    POST /v1/lists/saved/add HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "req": {
        "ptid": "pt_7f3a",
        "contactId": "4412891",
        "listingKey": "jk_9c2e1b",
        "placementId": 12
      }
    }
    {
      "ok": true
    }
    • Reconstructed from the bookmark action on job cards and the My Jobs saved list
  • Get job-seeker profile

    POST /v1/profiles/seeker osint

    Reads the unified job-seeker profile: headline, skills, education, employment history, resume/photo URLs and private salary/phone fields.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • contactId
    • generatePresignedResumeUrl
    • generatePresignedPhotoUrl
    • jobseekerProfile
    • headline
    • executiveSummary
    • experienceLevel
    • hasResume
    • skills
    • education
    • employment
    • jobPreferences
    • relocateOk
    • remoteOk
    • minimumAnnualDesiredPay
    • resumeTemporaryUrl
    • photoTemporaryUrl
    • discoverabilityOptIn
    • desiredSalaryRaw
    • displayPhone
    POST /v1/profiles/seeker HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "contactId": "4412891",
      "generatePresignedResumeUrl": true,
      "generatePresignedPhotoUrl": true
    }
    {
      "jobseekerProfile": {
        "contactId": "4412891",
        "headline": "Staff Product Manager",
        "executiveSummary": "8 years in marketplace products.",
        "experienceLevel": "SENIOR",
        "hasPhoto": true,
        "hasResume": true,
        "skills": ["Android", "SQL"],
        "education": [{"degree": "B.S.", "school": "UT Austin"}],
        "employment": [{"company": "Example Corp", "title": "PM"}],
        "jobPreferences": {"relocateOk": false, "remoteOk": true, "minimumAnnualDesiredPay": 140000},
        "resumeFilename": "alex-rivera.pdf",
        "resumeTemporaryUrl": "https://example.com/resume.pdf",
        "photoTemporaryUrl": "https://example.com/photo.jpg",
        "discoverabilityOptIn": true
      },
      "private": {
        "engagementLevel": "HIGH",
        "desiredSalaryRaw": "140000",
        "displayPhone": "+15125550123",
        "location": "Austin, TX"
      }
    }
    • Reconstructed from the seeker profile screen with resume, skills and pay preferences
  • One-click apply eligibility

    POST /v1/apply/eligibility opendata

    Tells the job-details apply button whether ZipApply one-click is available, or which profile/listing gaps block it.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • listingKey
    • contactId
    • oneClickApply
    • profileGap
    • listingGap
    POST /v1/apply/eligibility HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "req": {
        "listingKey": "jk_9c2e1b",
        "contactId": "4412891"
      }
    }
    {
      "rsp": {
        "listingKey": "jk_9c2e1b",
        "oneClickApply": true,
        "profileGap": null,
        "listingGap": null
      }
    }
    • Reconstructed from the apply button state that checks one-tap apply availability
  • Apply to listing

    POST /v1/apply/submit opendata

    Submits a ZipApply application for a listing, carrying attribution (placementId, utm*) from the card the seeker tapped.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • listing_key
    • referrer
    • source
    • placementId
    • trafficSourceId
    • utmSource
    • utmCampaign
    • utmMedium
    • justWebView
    • applicationId
    • status
    POST /v1/apply/submit HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "listingKey": "jk_9c2e1b",
      "referrer": "android_job_details",
      "source": "zipapply",
      "placementId": "12",
      "trafficSourceId": "ts_1",
      "utmSource": "app",
      "utmCampaign": "home_feed",
      "utmMedium": "android",
      "justWebView": false
    }
    {
      "success": true,
      "listingKey": "jk_9c2e1b",
      "applicationId": "app_5510",
      "status": "SUBMITTED"
    }
    • Reconstructed from the one-tap apply confirmation flow with its attribution fields
  • Get notifications

    POST /v1/notifications/feed opendata

    Pages the in-app notification center: match alerts with title, body, deep-link url and the related jobKey.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • contactId
    • ptid
    • placementId
    • limit
    • continueToken
    • notifications
    • id
    • createTimeUtc
    • type
    • title
    • body
    • url
    • jobKey
    • impressionLotId
    POST /v1/notifications/feed HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "contactId": "4412891",
      "ptid": "pt_7f3a",
      "placementId": 12,
      "limit": 20,
      "continueToken": ""
    }
    {
      "notifications": [{
        "id": "n_9021",
        "createTimeUtc": "2026-09-28T14:02:11Z",
        "type": "NEW_MATCH",
        "title": "New match: Staff Product Manager",
        "body": "Example Corp in Austin, TX",
        "url": "ziprecruiter://job/jk_9c2e1b",
        "jobKey": {"listingKey": "jk_9c2e1b", "matchId": "m_4412"}
      }],
      "impressionLotId": "lot_n1",
      "continueToken": "ct_n20"
    }
    • Reconstructed from the in-app notification center with its match alerts
  • Unread recruiter messages

    POST /v1/messages/unread-count opendata

    Returns the recruiter-inbox unread badge shown on the Conversations tab.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • contactId
    • unreadCount
    POST /v1/messages/unread-count HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "contactId": "4412891"
    }
    {
      "unreadCount": 3
    }
    • Reconstructed from the unread badge on the recruiter messages tab
  • Set saved searches

    POST /v1/alerts/saved-searches opendata

    Persists the seeker's saved job alerts (query, location, radiusMiles, remoteBehavior) used for push and email matches.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • savedSearches
    • search
    • location
    • countryAlpha2
    • radiusMiles
    • contactId
    • locid
    • remoteBehavior
    • lastModifiedTime
    • placementId
    POST /v1/alerts/saved-searches HTTP/1.1
    Content-Type: application/json
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    
    {
      "savedSearches": [{
        "search": "product manager",
        "location": "Austin, TX",
        "countryAlpha2": "US",
        "radiusMiles": 25,
        "contactId": "4412891",
        "locid": "loc_austin",
        "remoteBehavior": "INCLUDE_REMOTE"
      }],
      "placementId": 12
    }
    {
      "ok": true
    }
    • Reconstructed from the saved job-alert editor with query, location and radius fields
  • Account deletion status

    GET /v1/account/deletion-status opendata

    Reads the account-deletion request status and requestedTime for the signed-in contact.

    Auth: Session cookie from the sign-in call plus HMAC request-signing headers.

    • contact_id
    • status
    • requestedTime
    GET /v1/account/deletion-status HTTP/1.1
    Cookie: <session-cookie>
    X-Request-Signature: <hmac-signature>
    {
      "status": "PENDING",
      "requestedTime": "2026-09-20T18:11:00Z"
    }
    • Reconstructed from the account privacy screen showing deletion request status

Data categories

  • job listings
  • job-seeker profiles
  • applications
  • notifications
  • saved searches
  • device identity

Where teams use this data

  • Job-feed matching warehouse

    Nightly pull the job feed for a contactId and store listingKey, title, pay, company, location and saved so an ATS can rank ZipRecruiter matches against an internal req pipeline.

  • Profile completeness for ZipApply

    Read the seeker profile (headline, skills, hasResume, minimumAnnualDesiredPay, resumeTemporaryUrl) and the one-tap apply eligibility for each listingKey to flag profileGap before routing a candidate into the apply flow.

  • Alert and inbox SLA

    Poll the notification feed and the unread recruiter-message count to measure time-to-open on NEW_MATCH alerts and recruiter replies, keyed by contactId and listingKey.

  • Saved-search coverage

    Write saved searches with query, location, radiusMiles and remoteBehavior so a career-site widget can keep ZipRecruiter job alerts in sync with a seeker's preferred query.

Frequently asked questions

How does ZipRecruiter authenticate job-seeker API calls?

Anonymous traffic registers the device first and receives an encryptedDeviceId plus an inferred country used for local results. Email sign-in sends a one-time code; confirming it returns contactId and ptid and sets a session cookie. Signed-in calls carry that cookie plus HMAC request-signing headers.

Which fields identify a ZipRecruiter job listing?

Every listing carries a listingKey plus a matchId for the seeker match. Hydrated cards and the detail view add title, pay, benefits, employmentTypes, company, location, shortDescription or htmlFullDescription, saved state and share URLs.

Can I read a seeker's resume and salary preference?

The signed-in seeker profile returns hasResume, resumeFilename and a temporary resume URL, plus headline, skills, education, employment history and jobPreferences.minimumAnnualDesiredPay; private fields include desiredSalaryRaw and displayPhone.

Where does one-tap ZipApply get decided?

An eligibility check per listingKey returns oneClickApply plus optional profileGap and listingGap. Eligible listings then submit the application with placementId and UTM attribution carried from the card the seeker tapped.

Apps similar to Job Search by ZipRecruiter

  • Indeed Job Search — Indeed is a global job aggregator whose app covers listings across industries; employers sponsor posts pay-per-click instead of ZipRecruiter's subscription model.
  • LinkedIn — LinkedIn combines a professional network with job listings and Easy Apply, and is strongest for white-collar, professional and senior roles.
  • Glassdoor — Glassdoor pairs job listings with company reviews, salary data and interview insights, so seekers can research employers before applying.
  • Monster — Monster is a long-running general job board that now includes AI matching features for connecting seekers with openings.
  • CareerBuilder — CareerBuilder is an established job board offering listings, a resume database and talent-management tools for the US market.
  • Snagajob — Snagajob focuses exclusively on hourly and shift work in restaurants, retail and hospitality, with one-click applications and map search that are free for job seekers.
  • JOB TODAY — JOB TODAY is a mobile-first app for hourly and service jobs with more than 10 million downloads.

Topics

  • ZipRecruiter API
  • ZipRecruiter job search endpoints
  • listingKey
  • ZipApply
  • jobseekerProfile
  • encryptedDeviceId
  • contactId
  • saved searches

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote