# Freelancer Jobs Scraper (`fetch_cat/freelancer-jobs-scraper`) Actor

Scrape public Freelancer.com project listings by keyword, category, or URL. Extract budgets, bids, skills, time left, and verified-payment signals.

- **URL**: https://apify.com/fetch\_cat/freelancer-jobs-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.21 / 1,000 project listings

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/platform/actors/running/actors-in-store#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

## Freelancer Jobs Scraper

Extract public Freelancer.com project listings by keyword, category, or URL.

Use this actor to monitor new freelance projects, collect lead lists, compare budgets, track skill demand, and export structured data from public Freelancer.com job result pages.

### What does Freelancer Jobs Scraper do?

Freelancer Jobs Scraper collects project cards from public Freelancer.com listing pages.

It returns clean project data such as title, project URL, description snippet, budget, bid count, skills, time left, payment verification, and source metadata.

You can scrape category pages, keyword searches, and exact URLs.

### Who is it for?

- 🧑‍💻 Freelancers looking for fresh project opportunities.
- 🏢 Agencies monitoring outsourcing demand.
- 📈 Sales teams finding companies with active project needs.
- 🔎 Recruiters tracking skill demand across public freelance projects.
- 📊 Analysts comparing budgets and proposal competition.

### Why use this actor?

Manual Freelancer.com monitoring is repetitive.

This actor turns public project listings into exportable rows.

You can run it every day, connect it to alerts, or send the data to your CRM.

### Input settings

| Setting | JSON key | Type / default | Description |
| --- | --- | --- | --- |
| Start URLs | `startUrls` | array, default `[{"url":"https://www.freelancer.com/jobs/web-scraping/"}]` | Freelancer.com jobs, category, keyword, or paginated URLs to scrape. |
| Keyword searches | `queries` | array, default `["web scraping"]` | Keywords to search in public Freelancer projects, such as web scraping or lead generation. |
| Category slugs | `categories` | array, default `["web-scraping"]` | Freelancer category slugs from URLs, for example web-scraping, python, or data-entry. |
| Maximum projects | `maxItems` | integer, default `20` | Maximum number of project listings to save across all sources. |
| Maximum pages per source | `maxPages` | integer, default `2` | Maximum paginated Freelancer result pages to open for each source. |
| Maximum run time | `maxRunSeconds` | optional integer, `60`–`270` | Safety limit for multi-page exports. The Actor preserves already saved projects and records a resume checkpoint before its deadline. |
| Proxy configuration | `proxyConfiguration` | object, default `{"useApifyProxy":false}` | Optional Apify Proxy settings. Leave empty for direct requests; use datacenter proxies first if your runs are rate limited. |

### Output fields

| JSON key | Label | Type | Description |
| --- | --- | --- | --- |
| `title` | Title | string | Output field for title. |
| `url` | Url | string | Output field for url. |
| `projectId` | ProjectId | string / null | Output field for projectid. |
| `slug` | Slug | string / null | Output field for slug. |
| `category` | Category | string / null | Output field for category. |
| `descriptionSnippet` | DescriptionSnippet | string / null | Output field for descriptionsnippet. |
| `budget` | Budget | string / null | Output field for budget. |
| `currency` | Currency | string / null | Output field for currency. |
| `bidCount` | BidCount | integer / null | Output field for bidcount. |
| `averageBid` | AverageBid | string / null | Output field for averagebid. |
| `timeLeft` | TimeLeft | string / null | Output field for timeleft. |
| `postedAt` | PostedAt | string / null | Output field for postedat. |
| `skills` | Skills | array | Output field for skills. |
| `clientVerifiedPayment` | ClientVerifiedPayment | boolean | Output field for clientverifiedpayment. |
| `sourceUrl` | SourceUrl | string | Output field for sourceurl. |
| `scrapedAt` | ScrapedAt | string | Output field for scrapedat. |

### Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

| Event | What is charged | Price |
| --- | --- | ---: |
| `start` | One-time fee charged when a run starts. Covers fixed startup cost (init, proxy warmup, first HTTP setup). | $0.005 |

| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
| `item` | Per Freelancer project listing produced | $0.41071 / 1,000 | $0.35714 / 1,000 | $0.27857 / 1,000 | $0.21429 / 1,000 | $0.14286 / 1,000 | $0.1 / 1,000 |

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

### Input options

You can combine multiple source types in one run.

- `startUrls` accepts Freelancer.com job, category, search, and paginated URLs.
- `queries` accepts keyword strings such as `web scraping`.
- `categories` accepts category slugs such as `web-scraping` or `python`.
- `maxItems` limits total saved projects.
- `maxPages` limits pages opened per source.
- `maxRunSeconds` is optional when you need a stricter safety budget than the platform timeout.
- `proxyConfiguration` lets you enable Apify Proxy if needed.

### Ready-to-run examples

- [Freelancer Lead Generation Projects](https://apify.com/fetch_cat/freelancer-jobs-scraper/examples/freelancer-lead-generation-projects)
- [Freelancer Ai Ml Project Demand](https://apify.com/fetch_cat/freelancer-jobs-scraper/examples/freelancer-ai-ml-project-demand)
- [Freelancer Data Entry Jobs](https://apify.com/fetch_cat/freelancer-jobs-scraper/examples/freelancer-data-entry-jobs)
- [Freelancer Python Automation Projects](https://apify.com/fetch_cat/freelancer-jobs-scraper/examples/freelancer-python-automation-projects)
- [Freelancer Web Scraping Jobs Leads](https://apify.com/fetch_cat/freelancer-jobs-scraper/examples/freelancer-web-scraping-jobs-leads)

[View all ready-to-run examples](https://apify.com/fetch_cat/freelancer-jobs-scraper/examples)

### Example input

```json
{
  "startUrls": [
    {
      "url": "https://www.freelancer.com/jobs/web-scraping/"
    }
  ],
  "queries": [
    "web scraping"
  ],
  "categories": [
    "web-scraping"
  ],
  "maxItems": 20,
  "maxPages": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

### Output example

```json
{
  "title": "Build a High-Speed Python Automation Bot for My Website",
  "url": "https://www.freelancer.com/projects/automation/build-high-speed-python-automation",
  "projectId": "build-high-speed-python-automation",
  "slug": "build-high-speed-python-automation",
  "category": "automation",
  "descriptionSnippet": "I am looking for an experienced Python automation developer...",
  "budget": "$250",
  "currency": "USD",
  "bidCount": 48,
  "averageBid": "$250",
  "timeLeft": "6 days left",
  "postedAt": null,
  "skills": ["Automation", "Python", "Selenium", "Web Scraping"],
  "clientVerifiedPayment": true,
  "sourceUrl": "https://www.freelancer.com/jobs/web-scraping/",
  "scrapedAt": "2026-07-02T08:00:00.000Z"
}
```

### How to scrape by category

1. Open a Freelancer.com category page.
2. Copy the slug from the URL.
3. Add it to `categories`.
4. Set `maxItems`.
5. Run the actor.
6. Export the dataset.

### How to scrape by keyword

Add one or more keyword phrases to `queries`.

The actor creates public Freelancer jobs search URLs and extracts matching project cards.

Use specific phrases for better lead quality.

### How to scrape exact URLs

Paste public Freelancer.com URLs into `startUrls`.

This is useful when you already have a search URL, category URL, or page 2+ URL you want to monitor.

### Tips for better results

- 🎯 Use specific categories for focused lead lists.
- 🧪 Start with `maxItems` between 20 and 50.
- 📌 Use scheduled runs for daily monitoring.
- 🧹 Remove duplicate rows by `url` in your downstream tool.
- 🌐 Enable proxy only if your network is rate limited.

### Integrations

Send output to Google Sheets for lead review.

Send output to Airtable for enrichment.

Send output to a CRM for sales follow-up.

Send output to Slack or email for new project alerts.

Use Apify webhooks to trigger workflows after each run.

### API usage

Run Freelancer Jobs Scraper from your own code with the Apify API.

**Node.js**

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
  "startUrls": [
    {
      "url": "https://www.freelancer.com/jobs/web-scraping/"
    }
  ],
  "queries": [
    "web scraping"
  ],
  "categories": [
    "web-scraping"
  ],
  "maxItems": 20,
  "maxPages": 2
};

const run = await client.actor('fetch_cat/freelancer-jobs-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python**

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/freelancer-jobs-scraper").call(run_input={
  "startUrls": [
    {
      "url": "https://www.freelancer.com/jobs/web-scraping/"
    }
  ],
  "queries": [
    "web scraping"
  ],
  "categories": [
    "web-scraping"
  ],
  "maxItems": 20,
  "maxPages": 2
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

**cURL**

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~freelancer-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://www.freelancer.com/jobs/web-scraping/"}],"queries":["web scraping"],"categories":["web-scraping"],"maxItems":20,"maxPages":2}'
```

### Use with AI agents via MCP

Freelancer Jobs Scraper can be used by AI assistants through the hosted Apify MCP server.

**Claude Code setup**

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/freelancer-jobs-scraper"
```

**Claude Desktop, Cursor, or VS Code JSON config**

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/freelancer-jobs-scraper"
    }
  }
}
```

**Example prompts**

- "Run Freelancer Jobs Scraper with this input JSON and summarize the dataset."
- "Export the latest Freelancer Jobs Scraper results to a table I can review."
- "Schedule this Actor for monitoring and tell me what changed between runs."

### Scheduling

Create a scheduled Apify task to run this actor daily or hourly.

Use a low `maxItems` value for frequent monitoring.

Use higher limits for periodic market research.

### Data quality notes

Freelancer.com listing pages show public project summaries.

Some fields may be missing when Freelancer does not show them on a listing card.

Private or removed projects may not expose full details.

### Limits

The actor extracts public listing-card data.

It does not log in.

It does not submit bids.

It does not message clients.

It does not bypass private project restrictions.

### Legality

Only scrape public data.

Respect Freelancer.com's terms and applicable laws.

Do not use the data for spam.

Use reasonable run sizes and schedules.

### FAQ

#### Is this an official Freelancer.com API?

No. This actor extracts public listing data and is not affiliated with Freelancer.com.

#### Can it bid on projects or message clients?

No. It only returns public project listing data.

### Troubleshooting

#### Why did I get fewer results than `maxItems`?

The selected pages may contain fewer public projects, duplicates, or ended projects.

Increase `maxPages` or add more categories.

#### Why are some budgets or dates empty?

Freelancer.com does not show every value on every listing card.

The actor returns null when a public field is not visible.

#### Should I use a proxy?

Start without a proxy.

If you see rate limits from your network, enable Apify Proxy with a datacenter group first.

### Related actors

- [Ashby Jobs Scraper](https://apify.com/fetch_cat/ashby-jobs-scraper)
- [ATS Jobs Scraper for 6 ATS Sources](https://apify.com/fetch_cat/ats-jobs-scraper)
- [Built In Jobs Scraper](https://apify.com/fetch_cat/builtin-jobs-scraper)
- [Greenhouse Jobs Scraper](https://apify.com/fetch_cat/greenhouse-jobs-scraper)
- [Jobicy Remote Jobs Scraper](https://apify.com/fetch_cat/jobicy-remote-jobs-scraper)

### Support

Report bugs, wrong output, blocked runs, or missing fields from the Actor page. Include the Apify run ID or run URL, your input JSON, what you expected, what the Actor returned, and one reproducible public URL so the issue can be tested quickly.

### Privacy and data handling

This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses job-search inputs and public job-posting results to produce the output dataset and sends requests to public Freelancer Jobs pages/endpoints; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.

# Actor input Schema

## `startUrls` (type: `array`):

Freelancer.com jobs, category, keyword, or paginated URLs to scrape.

## `queries` (type: `array`):

Keywords to search in public Freelancer projects, such as web scraping or lead generation.

## `categories` (type: `array`):

Freelancer category slugs from URLs, for example web-scraping, python, or data-entry.

## `maxItems` (type: `integer`):

Maximum number of project listings to save across all sources.

## `maxPages` (type: `integer`):

Maximum paginated Freelancer result pages to open for each source.

## `maxRunSeconds` (type: `integer`):

Optional safety limit from 35 to 270 seconds. The Actor stops admitting new pages before the limit so already saved projects remain available.

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

Optional Apify Proxy settings. Leave empty for direct requests; use datacenter proxies first if your runs are rate limited.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.freelancer.com/jobs/web-scraping/"
    }
  ],
  "queries": [
    "web scraping"
  ],
  "categories": [
    "web-scraping"
  ],
  "maxItems": 20,
  "maxPages": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `projects` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.freelancer.com/jobs/web-scraping/"
        }
    ],
    "queries": [
        "web scraping"
    ],
    "categories": [
        "web-scraping"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/freelancer-jobs-scraper").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 = {
    "startUrls": [{ "url": "https://www.freelancer.com/jobs/web-scraping/" }],
    "queries": ["web scraping"],
    "categories": ["web-scraping"],
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/freelancer-jobs-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.freelancer.com/jobs/web-scraping/"
    }
  ],
  "queries": [
    "web scraping"
  ],
  "categories": [
    "web-scraping"
  ]
}' |
apify call fetch_cat/freelancer-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fetch_cat/freelancer-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/LAVfdM7WvL9nk9fJ4/builds/bLTtC8Z3z2aUAdTBK/openapi.json
