# OmniExtract AI: LinkedIn + Multi-Site Job Scraper + AI Engine (`mr.data_scientist/omniextract-ai`) Actor

2026’s elite job scraper for LinkedIn, Indeed & more. Use advanced filters to extract rich data: full descriptions, salaries & seniority. Features LLM-powered AI extraction (SmartScraper/SearchGraph) for any URL. Fast, proxy-ready & optimized for deep data. No coding required. JSON/CSV/audio export.

- **URL**: https://apify.com/mr.data\_scientist/omniextract-ai.md
- **Developed by:** [Ali Hassan](https://apify.com/mr.data_scientist) (community)
- **Categories:** AI, Jobs, Automation
- **Stats:** 82 total users, 1 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## OmniExtract AI

### 🚀 The Most Powerful LinkedIn Job Scraper + AI Web Extraction

> **Scrape 1000+ LinkedIn jobs in minutes. Extract data from any website with AI. No coding required.**

***

### ⭐ Why Choose OmniExtract AI?

| Feature                          | OmniExtract AI                         | Other Scrapers        |
| -------------------------------- | -------------------------------------- | --------------------- |
| **LinkedIn Jobs**          | ✅ Up to 1000 jobs/run                 | ❌ Limited or blocked |
| **🟢 ZipRecruiter Jobs**   | ✅ Full ZipRecruiter scraping + salary | ❌ Not available      |
| **🔥 AI Smart Job Filter** | ✅ Filter jobs by resume match         | ❌ Manual filtering   |
| **AI-Powered Extraction**  | ✅ Natural language                    | ❌ Complex selectors  |
| **Multi-LLM Support**      | ✅ 6+ providers                        | ❌ Single provider    |
| **No Rate Limits**         | ✅ Smart pagination                    | ❌ Frequent blocks    |
| **Job Detail Scraping**    | ✅ Full descriptions                   | ❌ Basic info only    |
| **Audio Summaries**        | ✅ Text-to-Speech                      | ❌ Not available      |

***

### 📋 All Extraction Modes

| Mode                              | Purpose                             | Best For                                 |
| --------------------------------- | ----------------------------------- | ---------------------------------------- |
| **💼 LinkedIn Jobs**        | Scrape job listings at scale        | Job seekers, recruiters, market research |
| **🤖 LinkedIn + AI Filter** | Smart job filtering by resume match | Job seekers who want relevant jobs only  |
| **🟢 ZipRecruiter Jobs**    | Scrape ZipRecruiter job listings    | Job seekers, recruiters, salary research |
| **🔍 Web Scraper**          | Extract data from any URL           | Product pages, articles, directories     |
| **🌐 Web Search**           | Search web & extract                | Research, competitor analysis            |

***

## 🟢 ZIPRECRUITER JOB SCRAPER

#### Scrape ZipRecruiter Job Listings with AI-Powered Matching

**Perfect for:**

- 🎯 Job seekers wanting salary insights (ZipRecruiter shows salary ranges)
- 📊 Recruiters tracking hiring trends across platforms
- 🏢 HR Teams doing compensation research
- 📈 Data Analysts studying employment trends

**Key Features:**

- ✅ **Direct ZipRecruiter search** - Scrape jobs directly from ZipRecruiter search results
- ✅ **Full job details** - Get complete descriptions, requirements, salary info
- ✅ **AI-powered filtering** - Score jobs against your resume (optional)
- ✅ **Serper fallback** - Uses Google search to find more ZipRecruiter job URLs
- ✅ **StealthyFetcher** - Anti-detection scraping with automatic retries
- ✅ **Salary data** - ZipRecruiter often shows salary ranges (great for research)
- ✅ **All filters supported** - Date posted, radius

#### ⚡ Quick Start - Basic Scraping

```json
{
  "graph_type": "ZipRecruiterJobScraper",
  "ziprecruiter_keyword": "Software Engineer",
  "ziprecruiter_location": "San Francisco, CA",
  "ziprecruiter_max_jobs": 50
}
```

#### 🤖 With AI Smart Filter

```json
{
  "graph_type": "ZipRecruiterJobScraper",
  "ziprecruiter_keyword": "Data Scientist, Machine Learning Engineer",
  "ziprecruiter_location": "New York, NY",
  "ziprecruiter_max_jobs": 50,
  "ziprecruiter_scrape_details": true,
  "ziprecruiter_date_posted": "10days",
  "ziprecruiter_radius": 25,
  "enable_ai_job_filter": true,
  "resume_text": "Your resume text here...",
  "min_rating": 7.0,
  "llm_provider": "openai",
  "llm_api_key": "sk-your-api-key",
  "serper_api_key": "your-serper-key"
}
```

#### 📦 Example Output

```json
{
  "success": true,
  "data": {
    "jobs": [
      {
        "job_id": "abc123xyz",
        "listing_key": "abc123xyz",
        "job_title": "Senior Data Scientist",
        "company": "Tech Corp",
        "location": "New York, NY",
        "salary": "$150,000 - $200,000/year",
        "job_url": "https://www.ziprecruiter.com/jobs/job/i?lvk=abc123xyz",
        "description": "Full job description...",
        "posted_date": "2 days ago",
        "source": "ziprecruiter",
        "employment_type": "Full-Time",
        "ai_match_rating": 8.5,
        "ai_match_reason": "Strong match - ML experience aligns with requirements"
      }
    ],
    "total_found": 25,
    "total_scraped": 50,
    "ai_filter_enabled": true
  }
}
```

#### 🎛️ Input Parameters

| Parameter                       | Required | Description                                           |
| ------------------------------- | -------- | ----------------------------------------------------- |
| `ziprecruiter_keyword`        | ✅       | Job title(s) to search (comma-separated for multiple) |
| `ziprecruiter_location`       | Optional | Location to search (default: United States)           |
| `ziprecruiter_max_jobs`       | Optional | Max jobs to return (default: 25, max: 500)            |
| `ziprecruiter_scrape_details` | Optional | Fetch full job descriptions (default: true)           |
| `ziprecruiter_date_posted`    | Optional | `24hr`, `5days`, `10days`, `month`            |
| `ziprecruiter_radius`         | Optional | Search radius in miles (5, 10, 25, 50, 100)           |
| `enable_ai_job_filter`        | Optional | Enable AI scoring (default: false)                    |
| `resume_text`                 | For AI   | Your resume for AI matching                           |
| `min_rating`                  | For AI   | Minimum AI score 1-10 (default: 7.0)                  |
| `serper_api_key`              | Optional | Enables Serper fallback search                        |
| `llm_api_key`                 | For AI   | API key for AI provider                               |

#### 💰 Pricing

ZipRecruiter uses the same pricing as LinkedIn/Indeed Job Scraper:

| Type                          | No Discount | Silver     | Gold        |
| ----------------------------- | ----------- | ---------- | ----------- |
| Basic                         | 0.0029/job  | 0.002/job  | 0.0012/job  |
| Full Details                  | 0.00399/job | 0.002/job  | 0.00165/job |
| **With AI Filter (4x)** | ~0.016/job  | ~0.008/job | ~0.0066/job |

**Pricing Examples (Full Details - Silver tier):**

- Standard: 100 jobs × $0.002 = **$0.20**
- **With AI Filter: 100 jobs × 4 × $0.002 = $0.80**

***

## 💼 LINKEDIN JOB SCRAPER

#### The Fastest Way to Scrape LinkedIn Jobs at Scale

**Perfect for:**

- 🎯 **Job Seekers** - Find hundreds of relevant positions instantly
- 📊 **Recruiters** - Build talent pipelines and track hiring trends
- 🏢 **HR Teams** - Competitive salary research and market analysis
- 📈 **Data Analysts** - Job market trends and employment data
- 🤖 **Job Board Builders** - Aggregate listings from LinkedIn

#### ⚡ Quick Start - Scrape Your First 100 Jobs

```json
{
  "graph_type": "LinkedInJobScraper",
  "job_keyword": "Software Engineer",
  "job_location": "San Francisco",
  "max_jobs": 100
}
```

**That's it!** No API keys needed for basic scraping. Results in under 2 minutes.

***

#### 🤖 NEW: AI Smart Job Filter

**Get only the jobs that match YOUR profile!** Enable AI-powered filtering to automatically score and filter jobs based on your resume.

```json
{
  "graph_type": "LinkedInJobScraper",
  "job_keyword": "Software Engineer",
  "job_location": "San Francisco",
  "max_jobs": 100,
  "enable_ai_job_filter": true,
  "resume_text": "Your resume text here...",
  "min_rating": 7.0,
  "min_good_jobs": 20,
  "llm_provider": "openai",
  "llm_api_key": "your-api-key",
  "serper_api_key": "your-serper-key-optional"
}
```

**How it works:**

1. Scrapes jobs from LinkedIn
2. AI analyzes each job against your resume
3. Scores relevance (1-10): Only returns jobs rated ≥ `min_rating`
4. **NEW: Intelligent Fallback** - If not enough good jobs found and `serper_api_key` provided:
   - AI generates targeted search queries (includes your preferred locations)
   - Searches LinkedIn via Serper API
   - Scrapes additional jobs with stealth mode
   - **Filters by your preferred locations** (respects your location preferences)
   - AI rates each job (only keeps ≥7/10)
   - Tries up to 3 times to reach `min_good_jobs`

**Each job gets:**

- `ai_classification`: YES / MAYBE / NEVER
- `ai_match_rating`: 1-10 relevance score
- `ai_reasoning`: Why this job matches (or doesn't)

**Example AI-enhanced output:**

```json
{
  "job_title": "Senior Backend Engineer",
  "company": "Stripe",
  "ai_classification": "YES",
  "ai_match_rating": 9,
  "ai_reasoning": "Strong match - 8+ years Python experience aligns with requirements, fintech background matches company focus"
}
```

> 💡 **Without AI filter**: Returns ALL scraped jobs (standard pricing)
> 💡 **With AI filter**: Returns only matching jobs with AI scores (4x pricing)
> 💡 **With AI + Serper fallback**: Ensures you get enough high-quality matches

***

#### 🎛️ Advanced Filtering Options

| Filter                     | Options                                                                                     | Example                        |
| -------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------ |
| **Experience Level** | `internship`, `entry_level`, `associate`, `mid_senior`, `director`, `executive` | `["mid_senior", "director"]` |
| **Work Type**        | `on_site`, `remote`, `hybrid`                                                         | `["remote"]`                 |
| **Date Posted**      | `past_24_hours`, `past_week`, `past_month`, `any_time`                              | `"past_week"`                |
| **Distance**         | `exact`, `5_miles`, `10_miles`, `25_miles`, `50_miles`, `100_miles`             | `"25_miles"`                 |

#### 📋 Full Configuration Example

```json
{
  "graph_type": "LinkedInJobScraper",
  "job_keyword": "Data Scientist",
  "job_location": "New York",
  "max_jobs": 500,
  "scrape_job_details": true,
  "experience_levels": ["mid_senior", "director"],
  "work_types": ["remote", "hybrid"],
  "date_posted": "past_week",
  "distance": "exact"
}
```

#### 📦 What You Get Back

Each job includes **rich, structured data**:

```json
{
  "job_id": "4144967742",
  "job_title": "Senior Software Engineer",
  "company": "Stripe",
  "location": "San Francisco, CA",
  "job_link": "https://www.linkedin.com/jobs/view/4144967742",
  "posting_date": "2026-01-08",
  "salary": "$180,000 - $250,000",
  "description": "Full job description with requirements...",
  "seniority_level": "Mid-Senior level",
  "employment_type": "Full-time",
  "job_function": "Engineering and Information Technology",
  "industries": "Financial Services",
  "applicants_count": "Over 200 applicants",
  "company_link": "https://www.linkedin.com/company/stripe"
}
```

#### 💰 Pricing

→ See [Complete Pricing Guide](#-complete-pricing-guide) for all tiers

| Scrape Type                   | No Discount | Silver     | Gold        |
| ----------------------------- | ----------- | ---------- | ----------- |
| Basic                         | 0.0029/job  | 0.002/job  | 0.0012/job  |
| Full Details                  | 0.00399/job | 0.002/job  | 0.00165/job |
| **With AI Filter (4x)** | ~0.016/job  | ~0.008/job | ~0.0066/job |

**Pricing Examples (Full Details - Silver tier):**

- Standard: 1000 jobs × 0.002 = **$2.00**
- **With AI Filter: 1000 jobs × 4 × 0.002 = $8.00** (premium AI-powered matching)

#### 💡 Pro Tips for LinkedIn Scraping

1. **Start Small, Scale Up** - Test with 50 jobs first, then increase to 500+
2. **Use Filters** - Narrow results for better quality data
3. **Enable Proxy** - Use Apify Proxy for reliability on large scrapes
4. **Fresh Listings** - Use `date_posted: "past_24_hours"` for new jobs only
5. **Specific Locations** - "San Francisco, CA" works better than "California"

***

## 🧠 AI-POWERED WEB EXTRACTION

#### 4 Extraction Modes

Beyond LinkedIn and recruiting, OmniExtract AI offers powerful AI extraction:

| Mode                         | Purpose                   | Best For                             |
| ---------------------------- | ------------------------- | ------------------------------------ |
| **SmartScraperGraph**  | Extract data from any URL | Product pages, articles, directories |
| **SearchGraph**        | Search web & extract      | Research, competitor analysis        |
| **SpeechGraph**        | Convert pages to audio    | Podcasts, accessibility              |
| **ScriptCreatorGraph** | Generate scraping code    | Automation, learning                 |

***

### 1️⃣ SmartScraperGraph - Extract Anything with AI

Just describe what you want in plain English:

```json
{
  "graph_type": "SmartScraperGraph",
  "source": "https://www.amazon.com/dp/B0CHX3QBCH",
  "prompt": "Extract product name, price, rating, and number of reviews",
  "llm_provider": "openai",
  "llm_api_key": "sk-your-api-key"
}
```

**Output:**

```json
{
  "product_name": "Apple iPhone 15 Pro Max",
  "price": "$1,199.00",
  "rating": "4.7 out of 5 stars",
  "reviews": "12,847 ratings"
}
```

#### 💰 Pricing

**0.05 USD per extraction** → See [Complete Pricing Guide](#-complete-pricing-guide) for all tiers

***

### 2️⃣ SearchGraph - Research Without URLs

Don't have a URL? Just ask a question:

```json
{
  "graph_type": "SearchGraph",
  "prompt": "Top 10 AI startups funding 2026 with amounts",
  "llm_provider": "openai",
  "llm_api_key": "sk-your-api-key",
  "max_results": 5
}
```

The AI searches the web, finds relevant pages, and extracts the data you need.

#### 💰 Pricing

**0.05 USD per search** → See [Complete Pricing Guide](#-complete-pricing-guide) for all tiers

***

### 3️⃣ SpeechGraph - Turn Web Pages into Audio

Perfect for creating audio summaries:

```json
{
  "graph_type": "SpeechGraph",
  "source": "https://techcrunch.com/latest",
  "prompt": "Summarize the top 5 tech news stories",
  "llm_provider": "openai",
  "llm_api_key": "sk-your-api-key"
}
```

**Output includes:**

- Text summary
- MP3 audio file URL (publicly accessible)
- Generated using OpenAI TTS

#### 💰 Pricing

**0.05 USD per conversion** → See [Complete Pricing Guide](#-complete-pricing-guide) for all tiers

***

### 4️⃣ ScriptCreatorGraph - Generate Scraping Code

Learn how to scrape any site:

```json
{
  "graph_type": "ScriptCreatorGraph",
  "source": "https://news.ycombinator.com/",
  "prompt": "Extract all article titles and URLs",
  "llm_provider": "openai",
  "llm_api_key": "sk-your-api-key"
}
```

Returns ready-to-run Python code using BeautifulSoup.

#### 💰 Pricing

**0.05 USD per script** → See [Complete Pricing Guide](#-complete-pricing-guide) for all tiers

***

### 💰 Complete Pricing Guide

> **Pay-per-event model** - You only pay for what you use. No subscriptions required.
>
> Higher volume users automatically unlock discounts: Bronze → Silver → Gold

All prices in USD.

#### 🎫 Base Fees (All Modes)

| Event       | Description          | Price   |
| ----------- | -------------------- | ------- |
| Actor Start | Charged once per run | 0.001   |
| Result      | Per item in dataset  | 0.00001 |

#### 💼 LinkedIn Job Scraping

| Type                          | No Discount | Bronze | Silver | Gold    |
| ----------------------------- | ----------- | ------ | ------ | ------- |
| Basic                         | 0.0029      | 0.0025 | 0.002  | 0.0012  |
| Full Details                  | 0.00399     | 0.0025 | 0.002  | 0.00165 |
| **With AI Filter (4x)** | ~0.016      | ~0.01  | ~0.008 | ~0.0066 |

- **Basic**: title, company, location, link
- **Full Details**: + description, salary, requirements
- **AI Filter**: + ai\_relevance, ai\_score, ai\_reasoning (filters out irrelevant jobs)

> 💡 ZipRecruiter uses the same `linkedin-job-full` / `linkedin-job-basic` billing events

**Standard Pricing (Full Details - Silver tier):**

- 100 jobs: $0.20
- 1000 jobs: $2.00

**AI Filter Pricing (4x charge multiplier - Silver tier):**

- 100 jobs → charge 400 units: $0.80
- 1000 jobs → charge 4000 units: $8.00

> 💡 AI Filter requires: `enable_ai_job_filter: true` + `resume_text` + `llm_api_key`

#### 🤖 AI-Powered Extraction

All AI modes use the `ai-extraction` event:

| Tier        | Price  |
| ----------- | ------ |
| No Discount | 0.0499 |
| Bronze      | 0.045  |
| Silver      | 0.04   |
| Gold        | 0.035  |

**Modes using 1 event each:**

- Smart Scraper (per URL)
- Search Graph (per search)
- Speech Graph (per audio)
- Script Creator (per script)

**Modes using linkedin-job-full event:**

- LinkedIn Job Scraper (standard: 1x, with AI: 4x multiplier → ~$0.008-0.016/job)

#### 📊 Quick Cost Calculator (Silver Tier)

| Mode                           | Items              | Charge Units  | Cost           |
| ------------------------------ | ------------------ | ------------- | -------------- |
| Smart Scraper                  | 1 page             | 1             | 0.04           |
| LinkedIn Jobs (no AI)          | 100 jobs           | 100           | 0.20           |
| **LinkedIn Jobs (AI)**   | **100 jobs** | **400** | **0.80** |
| LinkedIn Jobs full             | 100 jobs           | 100           | 0.20           |
| LinkedIn Jobs full             | 1000 jobs          | 1000          | 2.00           |
| **LinkedIn + AI Filter** | 100 jobs           | 400           | **0.80** |
| **LinkedIn + AI Filter** | 1000 jobs          | 4000          | **8.00** |

***

### 🔧 Configuration Reference

#### Required Fields by Mode

| Field                    | LinkedIn | LinkedIn+AI | SmartScraper | SearchGraph |
| ------------------------ | -------- | ----------- | ------------ | ----------- |
| `graph_type`           | ✅       | ✅          | ✅           | ✅          |
| `source`               | ❌       | ❌          | ✅           | ❌          |
| `prompt`               | ❌       | ❌          | ✅           | ✅          |
| `job_keyword`          | ✅       | ✅          | ❌           | ❌          |
| `enable_ai_job_filter` | ❌       | ✅          | ❌           | ❌          |
| `resume_text`          | ❌       | ✅          | ❌           | ❌          |
| `llm_api_key`          | ❌       | ✅          | ✅           | ✅          |
| `serper_api_key`       | ❌       | ❌          | ❌           | ❌          |

#### Supported LLM Providers

| Provider            | Models                           | API Key Required |
| ------------------- | -------------------------------- | ---------------- |
| **OpenAI**    | gpt-4o, gpt-4o-mini, gpt-4-turbo | ✅ Yes           |
| **Anthropic** | claude-3-5-sonnet, claude-3-opus | ✅ Yes           |
| **Google**    | gemini-1.5-pro, gemini-1.5-flash | ✅ Yes           |
| **DeepSeek**  | deepseek-chat, deepseek-coder    | ✅ Yes           |
| **Groq**      | llama-3.1-70b, mixtral-8x7b      | ✅ Yes           |

***

### 🔑 Getting API Keys

#### Search Provider (Serper Required for Hiring Manager Finder)

**SearchGraph** requires a Serper API key for search queries.

| Provider   | Cost                | Speed | API Key Required |
| ---------- | ------------------- | ----- | ---------------- |
| Serper.dev | 🆓 FREE 2,500/month | 1s    | ✅ Yes           |

To get your Serper API key:

1. Go to [serper.dev](https://serper.dev)
2. Sign up for free (2,500 free searches/month)
3. Copy your API key
4. Add `serper_api_key` to your request

#### LLM API Keys

- **OpenAI**: [platform.openai.com](https://platform.openai.com)
- **Anthropic**: [console.anthropic.com](https://console.anthropic.com)
- **DeepSeek**: [platform.deepseek.com](https://platform.deepseek.com)
- **Google Gemini**: [aistudio.google.com](https://aistudio.google.com)
- **Groq**: [console.groq.com](https://console.groq.com)

***

### 🛡️ Best Practices

#### For LinkedIn Scraping

- ✅ Use multiple titles to get more jobs
- ✅ If you don't want duplicate jobs, then run it everyday with 24 hours filter.
- ✅ Use specific locations for better accuracy
- ✅ Filter by date for fresh listings

#### For AI Extraction

- ✅ Be specific in your prompts
- ✅ Request structured output format
- ✅ Use gpt-4o-mini for cost efficiency
- ✅ Enable proxy for blocked sites

***

### 🛠️ Local Development Setup

For local development, install all dependencies and browser binaries:

```bash
## 1. Create virtual environment
python3 -m venv venv
source venv/bin/activate

## 2. Install Python dependencies
pip install -r requirements.txt

## 3. Install Playwright browser (for standard scraping)
python -m playwright install chromium --with-deps

## 4. Verify installation
python -c "import playwright; print('✅ Playwright ready!')"
```

#### Required API Keys

| API Key            | Purpose                                  | Get It At                                     |
| ------------------ | ---------------------------------------- | --------------------------------------------- |
| `llm_api_key`    | AI-powered extraction and analysis       | OpenAI, Gemini, DeepSeek, etc.                |
| `serper_api_key` | Search queries (SearchGraph)             | [serper.dev](https://serper.dev) (FREE 2,500/mo) |

***

### ⚠️ Disclaimer

This Actor (automation tool) is provided for **legitimate business purposes only**, including job searching, sales prospecting, market research, and recruitment. By using this Actor, you agree to:

- Comply with all applicable laws and regulations
- Respect the Terms of Service of websites being accessed
- Use extracted data responsibly and ethically
- Not use this tool for spamming, harassment, or any illegal activities

The developer does not assume responsibility for misuse of this tool. For recruiting features, always personalize outreach and respect recipients' preferences.

***

### 📞 Support & Contact

- **Documentation**: This README
- **Email**: mrali.hassan997@gmail.com
- **Upwork**: [Hire me on Upwork](https://www.upwork.com/freelancers/~010950841656437833)
- **YouTube**: [Mr. Data Scientist](https://www.youtube.com/@Mr.Data_Scientist)
- **LinkedIn**: [Ali Hassan Rai](https://www.linkedin.com/in/ali-hassan-rai/)

***

**Made with ❤️ by Ali Hassan**

# Actor input Schema

## `graph_type` (type: `string`):

Choose your extraction mode:

━━━ JOB SEARCH ━━━
• LinkedIn Jobs: Scrape LinkedIn job listings
• ZipRecruiter Jobs: Scrape ZipRecruiter job listings

━━━ WEB EXTRACTION ━━━
• Web Scraper: Extract data from any URL
• Web Search: Search the web and extract data (no URL needed)

## `source` (type: `string`):

⚠️ LEAVE EMPTY for SearchGraph, LinkedInJobScraper!

For SmartScraper/Speech/Script, enter the full URL:
• https://www.stripe.com
• https://news.ycombinator.com

## `prompt` (type: `string`):

For SmartScraper/Speech/Script: Describe what to extract.
For SearchGraph: This IS your web search query!
For LinkedInJobScraper: Not needed (use fields below).

## `search_provider` (type: `string`):

🔍 SEARCH ENGINE: Serper.dev API is used for all search queries (reliable, no rate limits).

Serper API key is REQUIRED for SearchGraph.

Get your free API key at https://serper.dev

## `llm_provider` (type: `string`):

Choose your AI provider. Supported: OpenAI, DeepSeek, Anthropic (Claude), Groq, Gemini. SpeechGraph requires OpenAI. LinkedInJobScraper: Any provider works for AI title expansion.

## `llm_api_key` (type: `string`):

Your API key from the selected provider. For LinkedInJobScraper: Optional, only needed for AI title expansion.

## `llm_model` (type: `string`):

Leave empty for default. Examples: gpt-4o-mini, claude-3-5-sonnet-20240620

## `llm_base_url` (type: `string`):

Only for self-hosted or Azure. Leave empty normally.

## `job_keyword` (type: `string`):

💼 LINKEDIN JOBS: Job title(s) to search for. Supports comma-separated titles for multiple searches (e.g., 'Director Renewable Energy, VP Hydrogen, Head of Energy'). If resume\_text is provided, AI will auto-generate optimal keywords.

## `min_rating` (type: `number`):

💼 LINKEDIN JOBS + AI: Only return jobs with AI rating >= this value (out of 10). Jobs below this threshold are filtered out. Default: 7.0

## `min_good_jobs` (type: `integer`):

💼 LINKEDIN JOBS + AI: Keep searching until at least this many jobs pass the rating threshold. The system will iterate up to 3 times with new keywords. If Serper API key is provided, will use fallback search to find more qualifying jobs. Default: 5

## `job_location` (type: `string`):

💼 LINKEDIN JOBS ONLY: Location to search (e.g., 'San Francisco', 'Remote', 'United States')

## `max_jobs` (type: `integer`):

💼 LINKEDIN JOBS ONLY: How many job listings to scrape (1-500)

## `scrape_job_details` (type: `boolean`):

💼 LINKEDIN JOBS ONLY: Fetch detailed info (description, requirements) for each job. Slower but more data.

## `experience_levels` (type: `array`):

💼 LINKEDIN JOBS ONLY: Filter by experience level

## `work_types` (type: `array`):

💼 LINKEDIN JOBS ONLY: Filter by work arrangement

## `date_posted` (type: `string`):

💼 LINKEDIN JOBS ONLY: Filter by posting date

## `distance` (type: `string`):

💼 LINKEDIN JOBS ONLY: Search radius from location

## `resume_text` (type: `string`):

📄 REQUIRED for AI Smart Filter: Paste your full resume or professional background. AI uses this to score jobs against your experience.

## `enable_ai_job_filter` (type: `boolean`):

💼 LINKEDIN/INDEED JOBS: Use AI to intelligently filter and score jobs based on your resume. Only returns jobs that match your experience, industry, and seniority level.

⚠️ Requires: resume\_text + llm\_api\_key

📊 Pricing: 4x standard rate (AI processing cost)

## `ziprecruiter_keyword` (type: `string`):

🔍 ZIPRECRUITER JOBS ONLY: Job title(s) to search for on ZipRecruiter. Supports comma-separated titles (e.g., 'Software Engineer, Data Scientist, Product Manager').

## `ziprecruiter_location` (type: `string`):

🔍 ZIPRECRUITER JOBS ONLY: Location to search (e.g., 'New York, NY', 'Remote', 'Washington DC').

## `ziprecruiter_max_jobs` (type: `integer`):

🔍 ZIPRECRUITER JOBS ONLY: Maximum number of job listings to scrape (1-500).

## `ziprecruiter_scrape_details` (type: `boolean`):

🔍 ZIPRECRUITER JOBS ONLY: Fetch full job descriptions for each listing. Slower but provides complete data.

## `ziprecruiter_date_posted` (type: `string`):

🔍 ZIPRECRUITER JOBS ONLY: Filter by when job was posted. ZipRecruiter supports: 24hr, 5days, 10days, month.

## `ziprecruiter_radius` (type: `integer`):

🔍 ZIPRECRUITER JOBS ONLY: Search radius from location in miles. Valid values: 5, 10, 25, 50, 100. Leave empty or 0 for any distance.

## `max_results` (type: `integer`):

SearchGraph only: How many search results to process.

## `serper_api_key` (type: `string`):

🔍 REQUIRED for SearchGraph.

Get your FREE API key at https://serper.dev (2,500 free searches/month).

This powers all web searches with reliable Google results.

## `enable_enrichment` (type: `boolean`):

🔍 SEARCHGRAPH + SERPER ONLY: Automatically detect 'Unknown' values and run follow-up searches to find missing data (names, LinkedIn profiles, etc.). Requires Serper API key.

## `headless` (type: `boolean`):

Run browser in background (recommended).

## `proxyConfiguration` (type: `object`):

Enable for blocked websites. Recommended for LinkedIn job scraping.

## Actor input object example

```json
{
  "graph_type": "SmartScraperGraph",
  "prompt": "Extract the main heading and description",
  "search_provider": "serper",
  "llm_provider": "openai",
  "min_rating": 7,
  "min_good_jobs": 5,
  "max_jobs": 50,
  "scrape_job_details": true,
  "distance": "",
  "enable_ai_job_filter": false,
  "ziprecruiter_max_jobs": 50,
  "ziprecruiter_scrape_details": true,
  "max_results": 5,
  "enable_enrichment": true,
  "headless": true
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "prompt": "Extract the main heading and description"
};

// Run the Actor and wait for it to finish
const run = await client.actor("mr.data_scientist/omniextract-ai").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "prompt": "Extract the main heading and description" }

# Run the Actor and wait for it to finish
run = client.actor("mr.data_scientist/omniextract-ai").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "prompt": "Extract the main heading and description"
}' |
apify call mr.data_scientist/omniextract-ai --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mr.data_scientist/omniextract-ai"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4ORGJy8RUythD6zSN/builds/Ptb4Qc9CSOz3PgIz5/openapi.json
