Prompt
What's the best way to scrape job listings?
Latest observation
Jul 15, 2026
OpenAI APIWeb search: off
The best way is usually not to scrape random job sites directly, but to use the most reliable and compliant source available in this order:
1) Use official APIs or feeds first
Many job boards and companies offer:
- Public APIs
- RSS/Atom feeds
- Sitemaps
- ATS endpoints from systems like Greenhouse, Lever, Workday, Ashby, SmartRecruiters
This is the cleanest approach because it’s:
- more stable
- less likely to break
- often allowed by the provider
- easier to normalize
2) Scrape company career pages when permitted
If there’s no API, scrape the company’s own careers pages, but:
- check robots.txt
- review terms of service
- throttle requests
- identify your crawler with a proper user agent
- avoid unnecessary load
3) Build a resilient scraper if you must scrape HTML
For pages that are JS-heavy or dynamically loaded:
- use Playwright or Puppeteer for rendering
- prefer requests/HTTP parsing when possible for speed and simplicity
- extract structured data like:
- JSON-LD
- schema.org JobPosting
- embedded JSON blobs
- meta tags
4) Normalize and deduplicate
Job data comes in many formats, so store a standard schema:
- title
- company
- location
- remote/hybrid
- salary range
- employment type
- description
- apply URL
- source
- posted date
Then deduplicate by:
- title + company + location
- canonical job ID if present
- apply URL
5) Make it maintainable
Good scraping systems usually have:
- per-site adapters/parsers
- retries and rate limiting
- change detection
- monitoring for layout changes
- logging and alerting on parse failures
6) Be careful about legality and ethics
Job listings may be copyrighted or protected by site terms. Best practice:
- prefer licensed or allowed sources
- don’t bypass access controls
- don’t overwhelm servers
- honor takedowns and robots policies
Recommended stack
A practical stack is:
- Python + requests + BeautifulSoup/lxml for simple pages
- Playwright for dynamic sites
- Scrapy if you need large-scale crawling
- Postgres for storage
- Redis + Celery/RQ for scheduling and queues
If you want, I can help you with:
- a scraping architecture for job listings,
- a Python example for a specific job board, or
- a schema for storing job data.