The Hub Jobs Scraper
Pricing
from $3.00 / 1,000 results
The Hub Jobs Scraper
[π° $3 / 1K] Extract startup job listings from thehub.io, the Nordic startup jobs board. Search by keyword, filter by region or position type, or paste job and search URLs. Returns title, company profile, location, role labels, remote flag, view counts, and the apply link or email per job.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Pull startup and tech job listings from thehub.io at scale β titles, full descriptions, human-readable role labels, view counts, hiring-company profiles, and the real apply link or apply email across the Nordic and broader European startup ecosystem. Built for recruiters, talent sourcers, and market researchers who need a clean, structured feed of the Nordic startup hiring market without copying jobs off the site one tab at a time.
Why This Scraper?
- 7 region filters, 20 countries in the data β Denmark, Sweden, Norway, Finland, Iceland, wider Europe, and a dedicated remote bucket. A recent full sweep of the board returned jobs from 20 distinct countries in one pass.
- A human role label on every single job β 24 readable classifications (
Sales,Engineer,Marketing & Communication,Backend developer,Customer Success,DevOpsβ¦) filled on 100% of rows, plus ajobRoleslist of up to 3 labels per posting. Segment by function without guessing from job titles. - 7 position types, from Full-time to Advisory board β Full-time, Part-time, Internship, Freelance, Cofounder, Student, or Advisory-board roles: the complete set The Hub itself exposes, and the only way to isolate the cofounder and student feeds.
- Weekly and all-time view counts on 100% of postings β
viewsWeekandviewsTotalshow real candidate demand (one Copenhagen engineering role logged 13,360 views in a single week). Rank by momentum instead of by post date. - An apply target on 96% of jobs β the external destination URL a candidate actually uses on 79% of rows, an apply email on the rest. No dead-end redirects back to the listing page.
- Full hiring-company profile attached to 99.9% of rows β company name, website, employee-count band, founding year, "what we do" blurb, and logo URL, turning every listing into a startup lead.
- Compensation reported the way the employer disclosed it β
salaryandequitycarry the disclosure type the company chose (competitive,monthly_range,hourly_rate,unpaid/undisclosed,negotiated,percentage), and where a figure is actually publishedsalaryMin/salaryMaxcarry it. About 1 posting in 18 states a number, and this export captures 100% of the ones that do β no silent blanks. - Both the go-live date and the expiry date β
publishedAtfilled on 100% of rows andexpirationDateon 100%, so you can drop stale postings and measure how long roles stay open. - Zero duplicates across a whole-board sweep β featured and sponsored placements are merged into one clean row per job: 0 repeated job IDs and 0 repeated URLs across a 1,599-row sweep.
Use Cases
Recruitment & Talent Sourcing
- Build a live feed of open startup roles by region and position type
- Track which Nordic startups are hiring for a given function or skill
- Surface cofounder and advisory-board openings that rarely hit mainstream boards
- Rank roles by weekly view count to prioritize the most active listings
Market & Hiring Research
- Measure which functions (engineering, sales, marketing, ops) startups are scaling
- Map hiring demand across Denmark, Sweden, Norway, Finland, and wider Europe
- Track how long roles stay open using publish and expiry dates
- Measure the remote-friendly share of Nordic startup hiring
Competitive Intelligence
- Watch a competitor's job postings to infer team growth and roadmap
- Detect new market entrants by tracking first-time hiring companies
- Compare headcount bands and founding years across a sector
Lead Generation & Sales
- Build startup lead lists with company name, website, size, and founding year
- Target fast-growing companies by hiring velocity and employee-count range
- Enrich a CRM with verified company websites pulled from active job posts
Data & Integration
- Power a jobs aggregator or talent marketplace with structured Nordic listings
- Feed hiring-trend dashboards with fresh role, region, and view-count data
- Set up alerts on new postings matching a saved keyword and region filter
Getting Started
Simple Keyword Search
The quickest start β one keyword, default cap:
{"searchQuery": "software engineer","maxResults": 100}
Region + Position-Type Filter
Narrow to full-time engineering roles in Denmark and Sweden:
{"searchQuery": "backend developer","regions": ["DK", "SE"],"jobPositionTypes": ["Full-time"],"remoteOnly": false,"maxResults": 200}
Remote-Only Across Every Region
Collect remote-friendly roles regardless of country:
{"searchQuery": "product manager","remoteOnly": true,"maxResults": 150}
Paste a Pre-Filtered Search URL or Target Specific Jobs
Build filters in The Hub's UI and paste the URL, or scrape exact postings:
{"searchUrls": ["https://thehub.io/jobs?search=designer&location=DK"],"jobUrls": ["https://thehub.io/jobs/6a8cdc1d3e369ff0a410da0e"],"maxResults": 100}
Input Reference
What to Scrape
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | none | Job title, role, or skill to search for (pre-filled with "software engineer" as an example you can clear or replace). The Hub matches your words anywhere in the posting, including the description β so results are a generous superset of the roles with that phrase in the title. Leave blank to collect all jobs matching the filters below. |
regions | select[] | [] | Restrict to these regions: Denmark, Sweden, Norway, Finland, Iceland, Europe (other), or Remote. Empty includes every region. This is the only place-based filter The Hub's job search supports. |
jobPositionTypes | select[] | [] | Restrict to these employment types: Full-time, Part-time, Internship, Freelance, Cofounder, Student, or Advisory board. Empty includes all types. |
remoteOnly | boolean | false | Turn on to return only jobs that allow remote work. |
Or Paste URLs
| Parameter | Type | Default | Description |
|---|---|---|---|
searchUrls | string[] | [] | Paste thehub.io search or category URLs straight from your browser. When provided, the keyword and filters above are ignored. A city or country name in the link (for example ?location=Copenhagen) is not something The Hub's job search narrows by, so the export covers the regions instead β use the Regions filter to target a place. A URL with no recognizable filters collects a broad set of jobs. |
jobUrls | string[] | [] | Paste individual thehub.io/jobs/<id> URLs to scrape just those postings. If both jobUrls and searchUrls (or the keyword filters) are set, jobUrls takes precedence and only those postings are scraped. |
Limits
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResults | integer | 100 | Hard cap on total job rows returned. Set to 0 for no cap. The run keeps the full last page even if it slightly overshoots the cap. When several regions are selected they are scanned in the order shown above, so a cap smaller than the combined pool fills from the earlier regions first β the run says so in its status message. |
Output
Every job is a single flat row. Key fields are flattened into table columns for easy filtering, while the nested company, location, salaryRange, and views objects are preserved in the full record.
{"id": "6a8cdc1d3e369ff0a410da0e","key": "staff-backend-engineer-product","url": "https://thehub.io/jobs/6a8cdc1d3e369ff0a410da0e","title": "Staff Backend Engineer - Product","descriptionText": "About Electricity Maps\nElectricity Maps is a VC-backed climate and energy tech start-up ...","companyName": "Electricity Maps","companyWebsite": "https://www.electricitymaps.com/","companyNumberOfEmployees": "11-50","companyFounded": "2016","company": {"name": "Electricity Maps","website": "https://www.electricitymaps.com/","numberOfEmployees": "11-50","founded": "2016","whatWeDo": "Electricity Maps provides real-time, historical, and forecasted electricity data ...","logoUrl": "https://thehub.io/files/s3/20250828095418-31ba3bd9a4277ce5e8b9667b1d64391e.png"},"address": "Copenhagen, Denmark","locality": "Copenhagen","country": "Denmark","isRemote": false,"jobRole": "Engineer","jobRoles": ["Engineer", "Backend developer"],"jobPositionTypes": ["Full-time"],"salary": "competitive","salaryMin": null,"salaryMax": null,"salaryRange": null,"equity": "undisclosed","viewsWeek": 13360,"viewsTotal": 20154,"applyLink": "https://careers.electricitymaps.com/jobs/8254392","applyEmail": null,"publishedAt": "2026-08-25T17:46:11.293Z","approvedAt": "2026-08-25T17:46:11.186Z","createdAt": "2026-08-25T00:04:45.461Z","expirationDate": "2027-03-19","scrapedAt": "2026-09-19T10:25:51.913766+00:00"}
On the roughly 1 posting in 18 where the company publishes an actual figure, the compensation fields fill in like this:
{"title": "Head of Demand Generation & Marketing Operations","salary": "range","salaryMin": 500000,"salaryMax": 800000,"salaryRange": { "min": 500000, "max": 800000 },"equity": "undisclosed"}
Core Fields
| Field | Type | Filled | Description |
|---|---|---|---|
id | string | 100% | Unique job identifier on The Hub |
key | string | 100% | Human-readable slug for the posting |
url | string | 100% | Direct link to the job listing |
title | string | 100% | Job title |
description | string | 100% | Full job description (HTML) |
descriptionText | string | 100% | Job description as plain text |
jobRole | string | 100% | Primary role label, e.g. Engineer, Sales, Marketing & Communication |
jobRoles | string[] | 100% | All role labels on the posting, 1β3 entries; the first matches jobRole |
jobPositionTypes | string[] | 100% | Employment types (Full-time, Internship, Student, Freelance, Cofounder β¦) |
isRemote | boolean | 100% | Whether the job allows remote work |
scrapedAt | string | 100% | ISO timestamp of when the row was collected |
Hiring Company
| Field | Type | Filled | Description |
|---|---|---|---|
companyName | string | 100% | Hiring company name |
companyWebsite | string | 100% | Company website URL |
companyNumberOfEmployees | string | 99.9% | Employee-count band, e.g. "11-50" |
companyFounded | string | 99.9% | Year the company was founded, e.g. "2016" |
company | object | 100% | Full company object incl. whatWeDo blurb and logoUrl |
Location
| Field | Type | Filled | Description |
|---|---|---|---|
address | string | 96.8% | Office address as written on the listing, e.g. "Copenhagen, Denmark" |
locality | string | 96.8% | City |
country | string | 96.8% | Country name β 20 distinct countries in a full sweep |
location | object | 96.8% | Nested { address, locality, country }. Fully remote postings often name no place at all |
Compensation
| Field | Type | Filled | Description |
|---|---|---|---|
salary | string | 100% | How the company chose to disclose pay: competitive (~89% of postings), unpaid, monthly_range, range, or hourly_rate |
salaryMin | number | 5.5% | Lower bound, present whenever salary states an actual figure |
salaryMax | number | 5.5% | Upper bound, present whenever salary states an actual figure |
salaryRange | object | 5.5% | Nested { min, max } |
equity | string | 100% | Equity disclosure type: undisclosed (~96%), negotiated, or percentage |
Engagement & Apply
| Field | Type | Filled | Description |
|---|---|---|---|
viewsWeek | number | 100% | Views in the last week |
viewsTotal | number | 100% | All-time view count |
views | object | 100% | Nested { week, total } |
applyLink | string | 79.1% | External link a candidate uses to apply |
applyEmail | string | 19.9% | Contact email used to apply when a job has no external link β 96% of jobs carry one of the two |
Dates
| Field | Type | Filled | Description |
|---|---|---|---|
publishedAt | string | 100% | When the job went live on The Hub β use this one for "posted" dates and sorting |
approvedAt | string | 99.3% | When The Hub approved the posting for display |
createdAt | string | 100% | When the posting record was created or last renewed. On about 6% of jobs a renewal pushes this past publishedAt, so it is not a reliable "posted" date |
expirationDate | string | 100% | Date the listing expires, e.g. "2027-03-19" |
Tips for Best Results
- Use
publishedAt, notcreatedAt, for freshness βpublishedAtis the go-live date and is filled on every row.createdAtalso ticks over when a company renews an old posting, so around 6% of jobs show acreatedAtthat is later β sometimes by months β than the day the job actually went live. - Filter on the
salaryvalue to find the jobs that publish numbers β keep the rows wheresalaryisrange,monthly_range, orhourly_rateand every one of them carriessalaryMinandsalaryMax. Thecompetitiverows (about 89% of the board) simply never state a figure anywhere on the site. - Narrow by place with the Regions filter, not a city name β The Hub's job search works on its seven region buckets; a city or country name typed into a pasted search link is not a filter the site applies, so pick Denmark, Sweden, Norway, Finland, Iceland, Europe (other), or Remote instead.
- Treat a keyword as a wide net, then tighten with
jobRoleβ The Hub matches your words anywhere in the posting, so amarketingsearch also returns engineering roles whose description mentions marketing. Keep the recall, then filter the rows on thejobRolelabel to get precision. - Sort by
viewsWeekto find hot roles β high weekly views relative to age signal the postings candidates are actively clicking, ideal for sourcing where speed matters. - Raise
maxResultsabove the pool when you select several regions β regions are scanned in the order you list them, so a cap smaller than their combined pool fills from the earlier ones. Denmark alone runs to roughly 370 open jobs, so a full Nordic sweep wants a cap of 1,000 or more. - Use
companyNumberOfEmployeesandcompanyFoundedto segment leads β filter to young, fast-growing startups (recent founding year, small headcount) when building an early-stage sales list. jobUrlsis exact β when you already have specific posting links, drop them straight intojobUrlsto skip search entirely.jobUrlsalways wins: set alongside a keyword orsearchUrls, only the listed postings are scraped.
Pricing
From $3.00 per 1,000 results β undercuts comparable Hub job extractors while bundling full company profiles, role labels, view counts, and apply targets at no extra charge. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.
| Results | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 100 | $0.36 | $0.34 | $0.32 | $0.30 |
| 1,000 | $3.60 | $3.40 | $3.20 | $3.00 |
| 10,000 | $36.00 | $34.00 | $32.00 | $30.00 |
| 100,000 | $360.00 | $340.00 | $320.00 | $300.00 |
A "result" is any job row in the output dataset. No compute or time-based charges β you pay per result, plus a small fixed per-run start fee.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n β Workflow automation
- Google Sheets β Direct spreadsheet export
- Slack / Email β Notifications on new results
- Webhooks β Trigger custom APIs on run completion
- Apify API β Full programmatic access
Legal & Ethical Use
This actor is designed for legitimate recruitment, talent sourcing, market research, and lead generation. Users are responsible for complying with applicable laws and The Hub's Terms of Service, and for handling any personal data in line with GDPR and other privacy regulations. Do not use extracted data for spam, harassment, or any illegal purpose.