Web Scrapers

How to Scrape Indeed.com Job Data

Summarize this article with
Updated October 20, 2026 8 min read

Indeed is one of the largest job boards in the world, which makes it a rich source of hiring signals. Recruiters scrape it for leads, analysts use it to benchmark salaries, and researchers track which skills employers want right now.

How these methods were evaluated:

  • Test runs of the no-code extension and a Python script against live Indeed search pages
  • A review of Indeed’s robots.txt, terms of service and anti-bot behavior
  • Practitioner discussions on scraping forums about what breaks in real projects

APISCRAPY is a managed web scraping service and is included below as one option. The comparison is kept neutral.

The goal is simple: help you pick the method that fits your volume, budget and skills, whichever one you choose.

How to Scrape Indeed Job Listings and Export to CSV

The no-code route suits recruiters, analysts and small teams who want a clean CSV without writing code. You need Chrome and about ten minutes.

Step 1: Install the Extension and Navigate to Indeed

Indeed Job Results With The Scraper Menu Listing Four Scraping Options.

Install the Indeed Scraper extension from the Chrome Web Store. Open Indeed and run a job search, for example “data analyst” in your target city. An overlay panel appears on the right side of the page.

Step 2: Select the Scraping Mode

Indeed Scraper Panel Showing 15 New Jobs Found, With Buttons To Add Them To The Export List

Click Jobs in a List in the overlay panel. The extension detects the job cards on the page and fills a data table inside the panel. Compare a few rows with the page to confirm the fields match.

Step 3: Load More Data with Auto-Scroll

Indeed Scraper Panel Showing 30 New Jobs Found Across Pages, With The Auto Button
Scroll down manually to load more jobs, or click Auto. The extension moves through multiple pages of search results and adds new jobs to the list. Click Stop when you have enough data.

Start with two or three pages first. It is easier to fix a wrong field early than after a long run.

Step 4: Customize the Data Fields

Indeed Scraper Control Panel With Toggles To Choose Which Job Fields To Export.

Click Customize, then select Jobs in a List. Uncheck columns you do not need, drag fields to reorder them, or rename headers to match your spreadsheet. Click Save to apply the changes.

Step 5: Manage Stored Data

Stored Data List With Three Jobs Selected And The Move To Export Button Highlighted.

Open the Settings menu and click Store Data. Review the collected listings, then delete unwanted rows or move selected rows to the export queue. Removing duplicates here saves cleanup work later.

Step 6: Export the Job Listings

Exported Report Table Of Scraped Indeed Jobs With Titles, Companies, Ratings, Locations And Cities.

Click Add to export list, then Export. Choose CSV, Excel, JSON or HTML to download the file to your computer.

What Data Can You Extract from Indeed?

The exact fields depend on what Indeed shows on each listing. Typical columns include:

  • Job title and company name
  • Location and work type (on-site, hybrid or remote)
  • Salary range, when the employer publishes one
  • Job type, such as full-time or contract
  • Posting date and job URL

Here is what an exported CSV can look like (illustrative sample):

indeed_jobs.csvcsv
job_title,company,location,salary,job_type,posted,url

Data Analyst,Example Co,”Austin, TX”,$70K-$85K,Full-time,2 days ago,https://www.indeed.com/viewjob?jk=EXAMPLE

Where extensions fall short: they run manually, they hit volume limits, and they can break when Indeed changes its page layout. For recurring or large projects, you need a more robust method.

How to Scrape Indeed Without Getting Blocked

Indeed sits behind Cloudflare protection, so a plain HTTP request often returns a 403 error or a “Just a moment” challenge page. Scraping guides from Scrapfly and several Apify listings report the same pattern: datacenter IPs get blocked almost immediately.

Why Indeed blocks scrapers: rate limiting, IP reputation checks, browser fingerprinting and challenge pages that only a real browser can pass.

How to scrape Indeed without getting blocked:

  • Rotate residential proxies. Residential IPs look like ordinary visitors, while datacenter ranges get flagged fast. Match the proxy country to the Indeed domain you target.
  • Use realistic browser headers. Send a current user agent and consistent language headers, so each request looks like it came from one real browser.
  • Slow down and randomize. Add random delays between pages. Identical timing between requests is an easy bot signal.
  • Use a real browser for challenged pages. A headless browser such as Playwright, with stealth settings, can pass JavaScript checks that plain requests cannot.
  • Retry on a fresh session. When a page is blocked, retry with a new IP and clean cookies instead of repeating the same request.
  • Split large searches. Indeed caps a single search at about 1,000 results, so break big jobs into smaller searches by location, title and date posted.

Even with all of this, expect upkeep. Maintainers of open-source job scrapers openly note that bot-detection changes can break a working script within weeks.

The managed option: a service like APISCRAPY handles proxy rotation, challenge solving and maintenance for you. You receive structured Indeed job data instead of managing infrastructure, which saves the most time on recurring or large projects.

Can You Scrape Indeed with Python?

Yes. Python is the most common route for developers. Requests and BeautifulSoup work for static pages, but Indeed’s challenge pages usually need a real browser such as Playwright or Selenium.

How to scrape Indeed with Python:

  1. Open the search URL in a headless browser.
  2. Wait for the job cards to load, then grab the page HTML.
  3. Parse the title, company and location from each card.
  4. Handle pagination, then save the rows to CSV.

Install the packages first:

install.shbash
pip install playwright beautifulsoup4

playwright install chromium
indeed_scraper.pypython
import csv

from bs4 import BeautifulSoup

from playwright.sync_api import sync_playwright

URL = “https://www.indeed.com/jobs?q=data+analyst&l=Austin%2C+TX”

with sync_playwright() as p:

browser = p.chromium.launch(headless=True)

page = browser.new_page()

page.goto(URL, timeout=60000)

page.wait_for_selector(“div.job_seen_beacon”, timeout=15000)

html = page.content()

browser.close()

soup = BeautifulSoup(html, “html.parser”)

rows = []

for card in soup.select(“div.job_seen_beacon”): # selectors change often

title = card.select_one(“h2.jobTitle span”)

company = card.select_one(“[data-testid='company-name']”)

location = card.select_one(“[data-testid='text-location']”)

rows.append([

x.get_text(strip=True) if x else “”

for x in (title, company, location)

])

with open(“indeed_jobs.csv”, “w”, newline="", encoding="utf-8") as f:

writer = csv.writer(f)

writer.writerow([“job_title”, “company”, “location”])

writer.writerows(rows)

Treat this as a starting point. From a normal home or office connection it may work for a few pages. At volume, expect a challenge page, so add the residential proxies and delays covered above.

Limitations of the Python approach:

  • Frequent blocks without proxies, retries and browser stealth settings
  • Constant maintenance, because CSS selectors break whenever Indeed changes its markup
  • Rising cost and complexity once you scale to thousands of listings

Which method should you choose?

Method Effort Best for Upkeep
Chrome extension Low Quick, one-off exports Low, but manual runs
Python script High Custom logic and developers High
Managed service (APISCRAPY) Low Recurring, large-scale data Handled for you

Does Indeed Allow Scraping?

Not officially. Indeed’s terms of use restrict automated data collection, and its robots.txt file limits what crawlers may access. Read both on the day you start, since they change.

Is it illegal, then? The answer is more nuanced than yes or no. In hiQ Labs v. LinkedIn, the Ninth Circuit held that scraping publicly accessible data does not count as unauthorized access under the US Computer Fraud and Abuse Act. But the same case ended with hiQ losing on breach of contract, because it had broken the site’s terms. In short: public data is not automatically a crime to collect, but violating terms can still bring civil trouble, such as blocked access or legal claims.

Responsible scraping practices:

  • Collect only public listing data, and never go behind a login or bypass access controls
  • Keep request rates low so you do not strain Indeed’s servers
  • Avoid personal data, such as recruiter names or contact details, unless you have a lawful basis under GDPR or CCPA

This is general information, not legal advice. For commercial projects, ask a qualified lawyer to review your use case. Managed services such as APISCRAPY focus on publicly available data, which keeps compliance questions simpler.

Ready to get started?

Start Building Your Web Crawler Today

APIScrapy makes web scraping simple, reliable and scalable.
No credit card required 7-day free trial

Conclusion

You can scrape Indeed job data three ways. A Chrome extension is quickest for a one-off CSV. Python gives developers full control at the cost of constant upkeep. A managed service is the practical choice when you need fresh data at scale. Choose by volume, budget and technical skill, and always stay within Indeed’s terms and the law.

If you need reliable Indeed job data without blocks, proxies or maintenance, APISCRAPY can deliver it clean and structured.

Book a demo with APISCRAPY to see how it fits your hiring, salary or market research workflow.

Frequently Asked Questions About Scraping Indeed

Can you legally scrape Indeed?

Collecting public data is not a crime under US precedent such as hiQ v. LinkedIn, but Indeed's terms restrict scraping, so blocks or civil claims are possible. Get legal advice for commercial use.

Can you scrape Indeed with Python?

Yes, using Playwright or Selenium with BeautifulSoup. Without proxies and regular maintenance, expect blocks and broken selectors.

How does Indeed know if you applied to a job?

Indeed records applications made through its own apply flow while you are signed in. Scraping listings does not submit or log an application.

What is the easiest and cheapest way to scrape job postings from multiple job portals?

Use a no-code extension for small one-off exports. For several portals on a regular schedule, a managed service like APISCRAPY avoids building and maintaining a separate script for each site.

Share this article
Did you find this page helpful?
Jyothish
Written by

Jyothish

A visionary operations leader with over 14+ years of diverse industry experience in managing projects and teams across IT, automobile, aviation, and semiconductor product companies. Passionate about driving innovation and fostering collaborative teamwork and helping others achieve their goals. Certified scuba diver, avid biker, and globe-trotter, he finds inspiration in exploring new horizons both in work and life. Through his impactful writing, he continues to inspire.

Connect on LinkedIn