Djinni Jobs Scraper
Pricing
from $0.55 / 1,000 item extracteds
Djinni Jobs Scraper
Search public Djinni tech vacancies and export structured jobs with employer, salary signal, location or remote status, experience, English level, description, activity counts, and canonical URL.
Pricing
from $0.55 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract public Djinni jobs into clean records for recruiting, sourcing, and labor-market monitoring. Search by role or skill, follow Djinni search-page filters, and export job title, employer, salary signal, location, remote status, experience, English level, description context, activity counts, and canonical URL.
The Actor uses Djinni's server-rendered public vacancy pages. It does not require a Djinni account, a browser, or a paid proxy.
What can you do with this Actor?
- Build a current feed of tech vacancies for one or more skills.
- Compare salary signals, experience requirements, and English levels.
- Find roles that Djinni marks as remote.
- Schedule recurring runs and compare stable
jobIdvalues downstream. - Export job data to JSON, CSV, Excel, Google Sheets, a database, or an ATS workflow.
Who is it for?
Recruiters can create targeted vacancy lists. Talent teams can monitor employer activity. Labor-market analysts can compare role, geography, English, and experience signals. Developers can feed normalized vacancy data into dashboards and automations without maintaining an HTML parser.
Data extracted
| Field | Meaning |
|---|---|
jobId | Stable Djinni vacancy identifier |
title, employer | Advertised role and employer |
salaryText | Public salary amount when displayed |
salarySignal | Djinni's relative $ to $$$$ salary signal |
location, remote | Hiring region and source remote flag |
experience, experienceYears | Displayed and parsed experience requirement |
englishLevel | English requirement such as B1 or B2 |
category | Job category shown in the listing |
description | Full plain-text description context available on the search page |
views, applications | Public engagement counts when shown |
postedText, postedAt | Displayed age and parsed posting timestamp |
jobUrl | Canonical public vacancy URL |
sourceSearchUrl, scrapedAt | Provenance and extraction timestamp |
Fields can be null when Djinni does not disclose the value.
How to get started
- Open the Actor input.
- Add one or more role or skill names under Job keywords.
- Optionally add a public
https://djinni.co/jobs/search URL containing Djinni filters. - Enable Remote jobs only if needed.
- Choose a maximum number of jobs.
- Click Start and open the default dataset when the run finishes.
A useful first input is:
{"keywords": ["JavaScript"],"maxItems": 10}
Input parameters
keywords
Up to 20 tech roles or skills. Each value becomes a Djinni primary_keyword search. Results are deduplicated across searches.
startUrls
Optional public Djinni jobs search URLs. Use these when you have already selected source-side filters on Djinni. Other domains and job-detail URLs are rejected.
remoteOnly
Keeps only records that Djinni marks as remote. This filter is applied equally to keyword searches and supplied search URLs.
maxItems
Maximum unique records saved across all input searches, from 1 to 5,000. Pagination stops as soon as this limit is reached.
maxRequestRetries
Number of bounded retries for temporary network, rate-limit, or server failures, from 0 to 4. Permanent errors are not retried blindly.
Output example
{"jobId": "846751","title": "Senior Frontend Engineer, Progressive Web Apps","employer": "Genius Match","salaryText": null,"salarySignal": "$$$$","location": "EU","remote": true,"experience": "7 years of experience","experienceYears": 7,"englishLevel": "B2","category": "Education","description": "Our client is the leader in the Early Childhood Education sector...","views": 304,"applications": 29,"postedText": "2d","postedAt": "2026-09-04T17:00:00","jobUrl": "https://djinni.co/jobs/846751-senior-frontend-engineer-progressive-web-apps/","sourceSearchUrl": "https://djinni.co/jobs/?primary_keyword=JavaScript","scrapedAt": "2026-09-06T20:38:23.401Z"}
Values change as vacancies and engagement counts change.
How much does it cost to extract Djinni jobs?
Pricing uses one small start charge plus a per-job event. Per-job rates decrease by Apify account tier. The exact active prices are shown in the Actor's pricing panel before every run.
As a simple estimate, multiply the displayed per-job event price by the requested result count and add the displayed start event. The Actor uses direct HTTP at 256 MB and has no automatic residential-proxy or browser fallback, keeping platform usage predictable.
Recurring monitoring workflow
Schedule the same input daily or weekly. Store jobId, postedAt, and selected fields in your destination. Compare each new dataset with the prior snapshot to identify new jobs, removed jobs, or changed public signals. The Actor produces current snapshots; it does not persist history or send alerts itself.
Spreadsheet and database export
In the run dataset, choose CSV, Excel, JSON, XML, or RSS. For ongoing pipelines, read the dataset API or connect an Apify integration. Use jobId as the source identity and scrapedAt as the observation time.
API with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~djinni-tech-jobs-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords":["DevOps"],"maxItems":25}'
Add waitForFinish=120 when a synchronous workflow is appropriate, then read the run's default dataset.
API with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/djinni-tech-jobs-scraper').call({keywords: ['Python'],remoteOnly: true,maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/djinni-tech-jobs-scraper').call(run_input={'keywords': ['Data Engineer'],'maxItems': 20,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with MCP and AI agents
Add the Apify MCP server to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/djinni-tech-jobs-scraper"
For Claude Desktop, Cursor, or VS Code, add this MCP JSON configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/djinni-tech-jobs-scraper"}}}
Example prompts:
- “Run the Djinni Jobs Scraper for JavaScript and return 20 jobs grouped by English level.”
- “Collect remote Python roles from Djinni and summarize employer and experience patterns.”
- “Export current DevOps vacancies with salary signals and canonical URLs.”
Reliability and limits
The Actor validates hosts and paths, checks response status and content type, deduplicates stable IDs, and retries only transient failures with bounded backoff. If Djinni returns an unexpected page shape, the run fails instead of silently producing a misleading empty dataset.
Djinni can change its public HTML or available filters. Results reflect the public pages visible at run time. A keyword may return broader matching jobs according to Djinni's own search behavior. The Actor does not apply, contact employers, bypass login, or recover historical vacancies.
Troubleshooting
Why are fewer jobs returned than maxItems?
The source may have fewer matching public vacancies, duplicate jobs may appear across searches, or remoteOnly may filter records. maxItems is a ceiling, not a guaranteed count.
Why is salary null?
Many vacancies show only Djinni's relative salary signal. Use salarySignal for that source-provided indicator; salaryText remains null unless a public amount is shown in the card.
Why did the run fail on my URL?
Only HTTPS Djinni /jobs/ search URLs are accepted. Open the filtered jobs page on Djinni and copy that search URL rather than a company, login, or individual job URL.
Legality and responsible use
Scrape only public data for legitimate recruiting, research, and analytics purposes. Follow Djinni's terms, applicable privacy and employment laws, and your organization's data-retention rules. Avoid profiling individuals, discriminatory hiring decisions, excessive schedules, or unsolicited outreach. You are responsible for how exported data is stored and used.
Related Actors
For broader regional hiring research, combine this source-specific feed with other public job-board Actors from automation-lab on Apify. Keep each source attributed by its canonical URL and source-specific ID.
FAQ
Does it require a Djinni login?
No. It extracts public vacancy search pages only.
Does it use a proxy or browser?
No automatic proxy or browser mode is enabled. The current implementation uses lightweight direct HTTP requests.
Can I use a scheduled Actor task?
Yes. Save the exact input as an Apify Task and attach a schedule. Compare datasets downstream by jobId.
Can it return JSON, CSV, or Excel?
Yes. Apify datasets expose all of those export formats without changing Actor input.
Does it send alerts or retain change history?
No. Use schedules, webhooks, integrations, or your own database to build that workflow around the current snapshot.