LinkedInWebScraper is a production-minded Python library and scheduled job runner for collecting LinkedIn job listings, normalizing the data, persisting run history, and exporting reusable datasets.
linkedin_web_scraperartifacts/jobs, artifacts/logs, and artifacts/statescrape once, scrape daily, export, and --dry-runexamples/mainpip install LinkedInWebScraper
pip install LinkedInWebScraper[openai]
pip install -e .[dev]
from linkedin_web_scraper import (
JobScraperConfig,
LinkedInJobScraper,
RemoteType,
configure_logging,
)
logger = configure_logging(filename="example.log")
config = JobScraperConfig(
position="Data Analyst",
location="San Francisco",
remote=RemoteType.REMOTE,
)
jobs = LinkedInJobScraper(logger=logger, config=config).run()
print(jobs.head())
Run the example scripts from examples/:
python examples/example.py
python examples/example_advanced_config.py
python examples/example_openai.py
The OpenAI example requires OPENAI_API_KEY in the environment.
linkedin-webscraper scrape once --dry-run
linkedin-webscraper scrape daily
linkedin-webscraper export --run-id <run-id>
Use runtime.example.toml as the template for a real runtime.toml. The root runtime scripts remain available for the daily and once workflows:
python main.py
python process_ds_jobs.py
Run the local gate before risky pushes or merges:
python -m tox -e preflight
For a faster smoke-only path:
python -m tox -e smoke
The detailed validation matrix and release flow live in docs/development/validation.md and docs/development/release-and-automation.md.
This project is licensed under the MIT License.