FastAPI-based microservice for scraping and storing jobs
6.4K
A FastAPI-based microservice for scraping and storing job listings from major job platforms like Indeed, LinkedIn, ZipRecruiter, and Google Jobs.
Run directly from Docker Hub:
docker run -d \
--name jobscraper-api \
-p 8000:8000 \
-e DB_HOST=127.0.0.1 \
-e DB_PORT=3306 \
-e DB_USER=jobs \
-e DB_PASSWORD=jobs_pw \
-e DB_NAME=jobsdb \
-e LOG_LEVEL=info \
-e LOG_JSON=true \
madtomy/jobscraper-api:latest
Access Swagger UI at: ๐ http://localhost:8000/docsโ
| Variable | Description | Default |
|---|---|---|
APP_PORT | Application port | 8000 |
LOG_LEVEL | Logging level (debug, info, warning, error) | info |
LOG_JSON | Output structured JSON logs | true |
DB_HOST | MySQL database host | โ |
DB_PORT | MySQL port | 3306 |
DB_USER | MySQL username | โ |
DB_PASSWORD | MySQL password | โ |
DB_NAME | Database name | jobsdb |
DB_POOL_SIZE | SQLAlchemy pool size | 10 |
DB_POOL_MAX_OVERFLOW | Connection overflow limit | 20 |
/docs)version: "3.9"
services:
api:
image: madtomy/jobscraper-api:latest
container_name: jobscraper-api
ports:
- "8000:8000"
environment:
APP_ENV: production
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jobs
DB_PASSWORD: jobs_pw
DB_NAME: jobsdb
LOG_JSON: "true"
restart: unless-stopped
Start it:
docker compose up -d
POST /scrapeTrigger a new scraping task:
{
"site_name": ["indeed", "linkedin", "google"],
"search_term": "software engineer",
"google_search_term": "software engineer jobs near Berlin Germany since yesterday",
"location": "Berlin",
"results_wanted": 20,
"hours_old": 72,
"country_indeed": "Germany",
"linkedin_fetch_description": true
}
Released under the MIT License ยฉ 2025 Madevโ
Content type
Image
Digest
sha256:7b575fb0bโฆ
Size
440.8 MB
Last updated
about 1 month ago
docker pull madtomy/jobscraper-api