# Web3Career Jobs Scraper: Filtered Crypto Job Feed (`getascraper/web3career-jobs-scraper`) Actor

Scrape web3.career crypto and blockchain job listings with remote-only, category/tag, minimum-salary, and posted-date filters. Outputs structured company, salary, location, employment type, and tags as JSON, CSV, or Excel, with a scheduled new-jobs-only monitoring mode. Billed per result.

- **URL**: https://apify.com/getascraper/web3career-jobs-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (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 $1.98 / 1,000 job 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/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

## Web3Career Jobs Scraper: Filtered Crypto Job Feed

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#F0FDF4;border:1px solid #BBF7D0;border-top:4px solid #16A34A;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Get remote-filtered crypto job listings, salary, and company data ready for your spreadsheet in minutes.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pulls structured listings straight from web3.career: title, company, pay range, location, and tags, filtered to exactly the roles you want.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BBF7D0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#15803D">🎯 Remote only</span><br>
<span style="font-size:12px;color:#57534E">Skip every hybrid or onsite listing and keep only fully remote crypto roles.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BBF7D0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#15803D">🏷️ 35 category tags</span><br>
<span style="font-size:12px;color:#57534E">Match jobs across blockchain, DeFi, security, marketing, and more in one run.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BBF7D0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#15803D">💰 Minimum salary filter</span><br>
<span style="font-size:12px;color:#57534E">Set a pay floor, annualized across hourly, weekly, and monthly rates.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BBF7D0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#15803D">🆕 New-jobs monitoring</span><br>
<span style="font-size:12px;color:#57534E">Schedule recurring runs that return only postings you have not seen before.</span>
</td>
</tr>
</table>

**Web3Career Jobs Scraper** extracts crypto and blockchain job listings from [web3.career](https://web3.career), one of the largest dedicated web3 job boards. Every run returns structured company, salary, location, employment type, and tag data, not a page of raw text. Filter by keyword, category, remote status, minimum salary, or how recently a job was posted, then export the results or hand them straight to your own pipeline.

Because it runs on Apify, you get scheduling, a run history, an API for every result, and proxy rotation handled for you. No account on web3.career is required and no login wall stands in the way.

### 🙋 Why use it

- **I am a web3 recruiter** sourcing blockchain engineering and DeFi candidates, filtering for remote-only senior roles above my client's salary floor so I only reach out to leads worth the outreach.
- **I am a job board operator** syndicating crypto listings onto my own site, running a scheduled feed that only returns new postings since my last run so I never republish duplicates.
- **I am a compensation researcher** tracking how web3 salaries move by role and region, pulling structured pay ranges across categories instead of copying numbers out of job descriptions by hand.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#F0FDF4;border:1px solid #BBF7D0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#16A34A;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your filters</span><br>
<span style="font-size:12px;color:#57534E">Pick a keyword, categories, remote-only, minimum salary, and a posted-date range.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0FDF4;border:1px solid #BBF7D0;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#16A34A;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the Actor</span><br>
<span style="font-size:12px;color:#57534E">It pulls every matching listing from web3.career and structures each field.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0FDF4;border:1px solid #BBF7D0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#16A34A;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export or automate</span><br>
<span style="font-size:12px;color:#57534E">Download JSON, CSV, or Excel, or schedule recurring runs for a new-jobs feed.</span>
</td>
</tr>
</table>

No coding required. Click **Try for free**, adjust the filters in the Input tab, and press **Start**. Results land in a dataset you can view in your browser, download, or pull through the Apify API.

### ⚙️ Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `keyword` | string | No | Free text matched against job title, skill, or company name. |
| `categories` | array of strings | No | Match jobs tagged with any of the selected categories out of 35 options, such as Blockchain, DeFi, Solidity, or Marketing. Leave empty to include every category. |
| `remoteOnly` | boolean | No | Only include jobs marked as fully remote. Defaults to false. |
| `minSalary` | integer | No | Skip jobs whose posted salary falls below this amount, annualized in USD across hourly, daily, weekly, and monthly pay periods. Leave at 0 to disable. |
| `datePosted` | enum | No | Only include jobs posted within a set window: any time, today, last 3 days, last 7 days, or last 30 days. Defaults to any time. |
| `includeFullDescription` | boolean | No | When off, only a short excerpt is included per job to keep the dataset lighter. Defaults to true. |
| `maxItems` | integer | No | Maximum number of job records to output. Defaults to 50. |
| `maxConcurrency` | integer | No | Number of job detail pages fetched in parallel. Defaults to 5. |
| `maxCandidates` | integer | No | Upper bound on how many candidate job listings are discovered before details are fetched. Defaults to 300. |
| `maxListingPages` | integer | No | Only used when a keyword, category, or remote-only filter is set. Caps how many listing pages are checked per category. Defaults to 15. |
| `retries` | integer | No | Number of retry attempts for a failed request before giving up on that listing. Defaults to 3. |
| `onlyNewJobs` | boolean | No | Skip jobs already seen in a previous run under the same state key. Pair with a schedule to build a new-jobs-only feed. Defaults to false. |
| `resetSeenJobs` | boolean | No | Clear the stored seen-jobs baseline for this state key before this run, so the next `onlyNewJobs` comparison starts fresh. Defaults to false. |
| `stateKey` | string | No | Namespace for the seen-jobs baseline, useful when running multiple monitoring configurations from the same Actor. Defaults to `web3career-default`. |
| `proxyConfiguration` | object | No | Proxy settings for the run. Apify Proxy is enabled by default and is sufficient for this target. |

### 📦 Output

Every run produces one dataset row per job listing. Here is a real example:

```json
{
    "job_id": "1kDMzUTM",
    "title": "Senior Solidity Engineer",
    "company_name": "Chainlayer Labs",
    "is_remote": true,
    "country": "Worldwide",
    "locality": null,
    "employment_type": "Full-time",
    "industry": "Blockchain",
    "tags": ["solidity", "smart-contract", "defi", "senior"],
    "work_hours": "Full-time",
    "salary_currency": "USD",
    "salary_min": 140000,
    "salary_max": 190000,
    "salary_period": "YEAR",
    "description": "We're looking for a senior Solidity engineer to design and audit smart contracts for our lending protocol...",
    "apply_url": "https://web3.career/i/1kDMzUTM",
    "posted_at": "2026-08-20",
    "valid_through": "2026-09-19",
    "job_url": "https://web3.career/senior-solidity-engineer/1kDMzUTM",
    "is_new": true,
    "source": "web3.career"
}
```

You can download the dataset in various formats such as JSON, CSV, HTML, or Excel, or pull it directly through the Apify API.

### 📋 Data table

| Field | Type | Description |
| --- | --- | --- |
| `job_id` | string | Unique identifier for the job listing. |
| `title` | string | Job title as posted. |
| `company_name` | string | Hiring company's name. |
| `company_logo_url` | string | Company logo image, when the listing has one. |
| `is_remote` | boolean | Whether the role is fully remote. |
| `country` | string | Country the role is based in, or a remote designation. |
| `region` | string | Broader region, when the listing specifies one. |
| `locality` | string | City or locality, when the listing specifies one. |
| `employment_type` | string | Full-time, part-time, contract, or similar. |
| `industry` | string | Industry classification for the role. |
| `tags` | array | All category and skill tags attached to the listing. |
| `work_hours` | string | Working hours or schedule type. |
| `salary_currency` | string | Currency of the posted salary. |
| `salary_min` | number | Lower bound of the posted salary range. |
| `salary_max` | number | Upper bound of the posted salary range. |
| `salary_period` | string | Pay period the salary is quoted in (hour, day, week, month, year). |
| `description` | string | Full job description text. |
| `description_excerpt` | string | Short excerpt, used when the full description is turned off. |
| `apply_url` | string | Link to apply for the role. |
| `posted_at` | string | Date the job was posted. |
| `valid_through` | string | Date the listing expires. |
| `job_url` | string | Canonical URL of the job listing on web3.career. |
| `is_new` | boolean | True when the job was not seen in a previous monitoring run. |
| `source` | string | Always `web3.career`. |
| `scraped_at` | string | Timestamp when this record was collected. |
| `first_seen_at` | string | Timestamp when this job was first captured under the current state key. |

### 💰 Pricing

This Actor is pay per result. You are billed only for job records that land in your dataset, and an empty run costs nothing. There are no subscriptions or fixed monthly fees. Check the Actor's **Pricing** tab on Apify Store for the current rate.

### ⭐ Enjoying Web3Career Jobs Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#F0FDF4;border:1px solid #BBF7D0;border-left:5px solid #16A34A;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">This filtered crypto job feed saves you hours of manual searching every week.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other recruiters and job board operators find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#16A34A;border:1px solid #BBF7D0;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/web3career-jobs-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 💡 Tips for better runs

- Start with a narrow filter (a category or keyword plus `remoteOnly`) rather than an unfiltered run if you only need a specific slice of the job market. It returns faster and keeps your dataset focused.
- Turn off `includeFullDescription` if you only need the structured fields (salary, tags, location). It keeps the dataset lighter and the run faster.
- For a recurring new-jobs feed, set `onlyNewJobs` to true, give the configuration a distinct `stateKey`, and attach a schedule. Each run after the first only returns postings added since the last one.
- Raise `maxListingPages` if a category or keyword filter is cutting off results you expect to see; lower it if you only need the freshest postings.

### ❓ FAQ

##### Does it get blocked?

No. web3.career serves its listings openly with no login wall or bot challenge on the pages this Actor reads, and Apify Proxy handles IP rotation automatically.

##### Does it extract private phone numbers or personal candidate data?

No. This Actor only collects public job listing data such as title, company, salary, and location. It does not scrape resumes, applicant details, or private contact information.

##### How fresh is the data?

Each run reads the live web3.career site at the time it runs. Use the `datePosted` filter to narrow results to today, the last 3 days, 7 days, or 30 days, or pair `onlyNewJobs` with a schedule for a continuously updated crypto jobs scraper feed.

##### Are all job categories supported?

Yes. The `categories` input covers 35 tags spanning development, blockchain, DeFi, security, marketing, design, operations, and more, matched as a union so you can combine several at once.

### 🔗 Other actors

- [Handshake Jobs Scraper: Job & Internship Listings](https://apify.com/getascraper/handshake-jobs-scraper) ↗ - Collects job and internship listings with salary and deadline data from Handshake.
- [Freshersworld Jobs Scraper: Fresher & Entry Jobs](https://apify.com/getascraper/freshersworld-jobs-scraper) ↗ - Pulls fresher and entry-level jobs from Freshersworld, filtered by experience and category.
- [Ashby Jobs Scraper: Hiring Change Monitor](https://apify.com/getascraper/ashby-jobs-monitor) ↗ - Monitors public Ashby job boards for new, updated, and closed roles.
- [Lever jobs scraper](https://apify.com/getascraper/lever-jobs-monitor) ↗ - Turns public Lever company boards into a hiring change feed.
- [Wantedly Japan Jobs Scraper: Startup Job Listings](https://apify.com/getascraper/wantedly-jobs-scraper) ↗ - Extracts startup job listings and company data from Wantedly Japan.

# Actor input Schema

## `keyword` (type: `string`):

Free-text search matched against job title, skill, or company (uses web3.career's own search).

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

Match jobs tagged with any of the selected categories (OR union across categories). Leave empty to include all categories.

## `remoteOnly` (type: `boolean`):

Only include jobs marked as fully remote / telecommute. Neither competitor Actor exposes this as an explicit filter.

## `minSalary` (type: `integer`):

Skip jobs whose posted salary (max of the range, or min if no max) is below this amount. Hourly/monthly/weekly/daily rates are annualized for comparison. Leave 0 to disable.

## `datePosted` (type: `string`):

Only include jobs posted within this time window.

## `includeFullDescription` (type: `boolean`):

When off, only a short excerpt is included in the output to keep the dataset lighter.

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

Maximum number of job records to output.

## `maxConcurrency` (type: `integer`):

Number of job detail pages fetched in parallel.

## `maxCandidates` (type: `integer`):

Upper bound on how many candidate job URLs are discovered (via sitemap or listing pages) before detail fetching begins.

## `maxListingPages` (type: `integer`):

Only used when a keyword, category, or remote-only filter is set. Caps how many paginated listing pages (15 jobs/page) are crawled per category.

## `retries` (type: `integer`):

Number of retry attempts for a failed HTTP request before giving up on that URL.

## `onlyNewJobs` (type: `boolean`):

Skip jobs already seen in a previous run under the same State key. Pair with a schedule to build a new-jobs-only feed.

## `resetSeenJobs` (type: `boolean`):

Clear the stored seen-jobs baseline for this State key before this run, so the next run's onlyNewJobs comparison starts fresh.

## `stateKey` (type: `string`):

Namespace for the seen-jobs baseline, useful when running multiple monitoring configurations (e.g. per category) from the same Actor.

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

Datacenter proxy is sufficient; web3.career serves server-rendered HTML with no anti-bot wall observed.

## Actor input object example

```json
{
  "categories": [],
  "remoteOnly": false,
  "minSalary": 0,
  "datePosted": "any",
  "includeFullDescription": true,
  "maxItems": 50,
  "maxConcurrency": 5,
  "maxCandidates": 300,
  "maxListingPages": 15,
  "retries": 3,
  "onlyNewJobs": false,
  "resetSeenJobs": false,
  "stateKey": "web3career-default",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/web3career-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/web3career-jobs-scraper").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 '{}' |
apify call getascraper/web3career-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/web3career-jobs-scraper"
        }
    }
}

```

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/IvNsLgAg1WCJbT5F0/builds/RyU7ZaZhiqESmHBsc/openapi.json
