# Cryptocurrency Jobs public scraper (`codingfrontend/cryptocurrency-jobs-scraper`) Actor

Extracts publicly visible Cryptocurrency Jobs listings and conservative JobPosting fields from cryptocurrencyjobs.co. It uses bounded requests and reports access or no-data conditions without bypassing controls.

- **URL**: https://apify.com/codingfrontend/cryptocurrency-jobs-scraper.md
- **Developed by:** [Coding Frontned](https://apify.com/codingfrontend) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Cryptocurrency Jobs Scraper do?

Collect **public crypto and blockchain vacancies** from [Cryptocurrency Jobs](https://cryptocurrencyjobs.co/). Results contain the job title, employer, published location, work mode, contract type and complete job description when available. The Actor also records source-published dates, category, explicit experience requirements, compensation details, skills and the separate application URL when the public page exposes them.

Use results for recruiting research, vacancy dashboards or job matching. Run the Actor in Apify Console, schedule snapshots, export the dataset or connect it to your tools. The Actor collects current public listings and does not claim that every vacancy remains open indefinitely.

### Why use this Actor?

The Actor keeps the output focused on job facts. It omits internal crawl timestamps, duplicate URL aliases, request instrumentation and diagnostic rows. Missing source details are omitted instead of guessed. Full descriptions and published business text are retained without a description-length cap; the response byte limit bounds each source response.

### How to scrape Cryptocurrency Jobs

1. Open the Input tab and choose a public Cryptocurrency Jobs page, or keep the home page.
2. Set the job, page and request limits. For an initial run, try three jobs and four requests.
3. Start the Actor and review the Output tab and run summary.
4. Download the dataset as JSON, CSV, HTML or Excel, or use the dataset API.

### Input

The defaults are 50 jobs, three listing pages, 20 requests, a 30-second request timeout and two retries. Detail requests count toward the request budget; collecting descriptions for three jobs from one listing normally takes four requests.

Use `startUrls` for listing or individual job pages. Existing aliases `sourceUrls`, `urls` and `url` are also supported. `maxItems` limits saved jobs; `maxPages` limits listing pages; `maxRequests` counts requests, retries and redirects. `requestDelayMs` adds spacing, `maxResponseBytes` limits each response, and `deduplicate` controls repeated jobs.

### Output

The example below shows selected fields from the Head of Finance listing collected locally on 2026-10-07 with the default input. The saved record is real; the description is shortened only in this documentation example.

```json
{
  "jobId": "stratosphere-head-of-finance",
  "jobTitle": "Head of Finance",
  "company": "Stratosphere",
  "companyUrl": "https://www.stratosphere.vip/",
  "companyLogo": "https://cryptocurrencyjobs.co/startups/assets/logos/stratosphere.07a236e6083c35d23ee84bb8b82da7cd2b06e40d95237c0cb86c77d03256fd47.jpg",
  "location": "Anywhere",
  "workplaceType": "remote",
  "employmentType": "FULL_TIME",
  "category": "Operations",
  "validThrough": "2026-10-31",
  "salaryCurrency": "USD",
  "salaryMin": 100000,
  "salaryMax": 140000,
  "salaryUnit": "YEAR",
  "datePosted": "2026-09-30T00:00:00.000Z",
  "url": "https://cryptocurrencyjobs.co/operations/stratosphere-head-of-finance/",
  "applicationUrl": "https://stratosphere-vip.breezy.hr/p/d6ef04addd3a01-finance-manager?state=closed",
  "sourceUrl": "https://cryptocurrencyjobs.co/"
}
```

Description excerpt (short excerpt for this documentation only; it is not an Actor output field): “Lead and oversee Stratosphere’s finance function, ensuring the effective management of financial operations, reporting, budgeting, and cash flow while…” The saved record retains the complete published one-paragraph description.

| Fields | Meaning |
|---|---|
| `jobTitle`, `company`, `companyUrl`, `companyLogo` | Published role and hiring organization details |
| `location`, `workplaceType`, `employmentType`, `category` | Published location, work mode, contract type and category |
| `description`, `experience`, `skills` | Complete description and explicit requirements or skills |
| `salaryCurrency`, `salaryMin`, `salaryMax`, `salaryUnit`, `salaryText` | Published numeric bounds, exact source salary period/unit, or compensation wording |
| `datePosted`, `validThrough` | Posting date normalized to UTC; validity cutoff preserved with its source date/date-time value |
| `url`, `jobId` | Public job page and source or URL-derived identity |
| `applicationUrl` | Distinct application destination linked by the source |
| `sourceUrl` | Original public URL supplied for the crawl |

`category` is derived from the public job page URL path (for example, `/operations/...` becomes `Operations`); it is not represented as a published JSON-LD category field.

Unpublished fields are omitted rather than invented. Failures and collection limits appear in the run summary and logs. The Actor does not store diagnostic rows in the customer dataset.

### Pricing and cost estimation

Review the price and resource settings in Apify Console before starting a run. More jobs and detail requests can increase runtime and platform usage. Start with a small run, then raise the budgets to match your needs.

### Tips and limitations

A run with saved jobs succeeds if a later page or optional detail request fails; the summary marks partial collection and reports the issue. A run with no useful jobs fails. Short descriptions may be all that the source publishes. The Actor records a distinct application link when available but does not follow that destination. If the source denies access, further requests stop.

### FAQ and support

The Actor makes ordinary public HTTP requests to Cryptocurrency Jobs and respects its access boundaries. Source pages, fields and availability can change. Users are responsible for using collected data in accordance with applicable terms and laws. Report problems through the Actor's Issues tab with the input and run link.

Query-string URLs are excluded because the source disallows them in its published robots.txt rules.

# Actor input Schema

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

Public cryptocurrencyjobs.co listing pages. The official home page is used when omitted.

## `sourceUrls` (type: `array`):

Alias for startUrls; public cryptocurrencyjobs.co listing pages.

## `urls` (type: `array`):

Alias for startUrls; public cryptocurrencyjobs.co listing pages.

## `url` (type: `string`):

Singular alias for startUrls.

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

Maximum normal job records to emit across all pages.

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

Maximum public listing pages to inspect, including supplied start URLs and same-site next pages.

## `maxRequests` (type: `integer`):

Hard cap on public HTTP requests for this run.

## `requestTimeoutSecs` (type: `integer`):

Timeout per public page request.

## `timeoutSecs` (type: `integer`):

Alias for requestTimeoutSecs.

## `requestTimeoutMs` (type: `integer`):

Alias for requestTimeoutSecs.

## `maxRetries` (type: `integer`):

Bounded retries for transient HTTP statuses or network failures.

## `requestDelayMs` (type: `integer`):

Optional delay between page requests.

## `maxResponseBytes` (type: `integer`):

Maximum HTML response size accepted from a public page.

## `deduplicate` (type: `boolean`):

Suppress repeated job IDs or URLs across pages.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://cryptocurrencyjobs.co/"
    }
  ],
  "maxItems": 50,
  "maxPages": 3,
  "maxRequests": 20,
  "requestTimeoutSecs": 30,
  "maxRetries": 2,
  "requestDelayMs": 0,
  "maxResponseBytes": 2000000,
  "deduplicate": true
}
```

# Actor output Schema

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

Genuine public jobs saved to the default dataset.

## `summary` (type: `string`):

Structured OUTPUT_SUMMARY key-value store record.

# 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("codingfrontend/cryptocurrency-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("codingfrontend/cryptocurrency-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 codingfrontend/cryptocurrency-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,codingfrontend/cryptocurrency-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/BimWxej2CXgmnwLY0/builds/rn13ZYWY1uWgXaJet/openapi.json
