Career Page Job Scraper — Greenhouse, Lever & Any ATS
Pricing
$10.99/month + usage
Career Page Job Scraper — Greenhouse, Lever & Any ATS
Scrape real job listings from any company career page. Supports Greenhouse, Lever, Workday, Ashby and 10+ ATS platforms. Returns job title, location, department, salary, required skills, remote status and apply link. Filter by keyword, department and remote.
Pricing
$10.99/month + usage
Rating
0.0
(0)
Developer
Scrape Pilot
Actor stats
0
Bookmarked
11
Total users
5
Monthly active users
17 days ago
Last modified
Categories
Share
💼 Career Page Job Scraper — Extract Jobs from Any Company Career Page
The smartest Career Page Job Scraper on Apify. Extract live job listings from Greenhouse, Lever, Ashby, Workday, BambooHR, Smartrecruiters, and any custom career page — with titles, locations, salaries, skills, departments, and direct apply links. Built for recruiters, HR teams, and talent intelligence platforms.
🆓 Try FREE for 2 hours — no credit card required. Then just $10.99/month for unlimited career page job scraping across any company, any ATS, any scale.
📌 Table of Contents
- What Is This Actor?
- Why This Is the Best Career Page Job Scraper
- 💰 Pricing
- Supported ATS Platforms
- Use Cases
- What Data Is Extracted?
- Smart Detection Features
- Output Fields (Full Reference)
- Input Parameters
- Example Inputs & Outputs
- ATS-Specific Extraction Guide
- Filtering Options
- Skill Detection List
- Proxy Configuration
- Performance & Speed
- FAQ
- Changelog
- Legal & Terms of Use
🔍 What Is This Actor?
Career Page Job Scraper is a production-grade Apify actor that extracts live job listings directly from any company's career page — no job board middleman, no stale data, no login required.
This career page job scraper works with all major Applicant Tracking Systems (ATS) including Greenhouse, Lever, Ashby, Workday, BambooHR, Smartrecruiters, Recruitee, Teamtailor, and any custom-built career portal. Just provide one or many career page URLs and receive back structured job records with titles, locations, departments, salary ranges, experience levels, required skills, remote status, and direct apply links.
Whether you are a recruiter monitoring competitor hiring, a talent intelligence platform tracking workforce trends, a job aggregator building a niche job board, or an HR team analyzing the talent market — this career page job scraper gives you the raw data you need, fast and clean.
🚀 Why This Is the Best Career Page Job Scraper
| Feature | This Actor | Job Boards (Indeed/LinkedIn) | Generic Scrapers |
|---|---|---|---|
| Direct from company career page | ✅ Always fresh | ❌ Often delayed/incomplete | ⚠️ Hit or miss |
| Greenhouse support | ✅ JSON + API | ❌ | ⚠️ HTML only |
| Lever support | ✅ 3-method extraction | ❌ | ⚠️ |
| Ashby support | ✅ Next.js JSON | ❌ | ❌ |
| Salary range extraction | ✅ Auto-detected | ✅ Sometimes | ❌ |
| Skills auto-detection | ✅ 40+ skills | ❌ | ❌ |
| Remote job filter | ✅ Built-in | ✅ | ❌ |
| Department filter | ✅ Built-in | ⚠️ | ❌ |
| Experience level detection | ✅ Auto | ⚠️ | ❌ |
| Bulk URL processing | ✅ 100+ URLs | ❌ | ⚠️ |
| No job board fees | ✅ | ❌ Per listing | ✅ |
| Price | $10.99/mo | $0 (limited) | Varies |
This career page job scraper goes directly to the source — company career pages — giving you fresher, more complete job data than any job board aggregator.
💰 Pricing
🆓 Free Trial — 2 Hours, No Credit Card
Start your first career page job scraper run right now with a full 2-hour free trial. No credit card. No form. Click Try for free and paste your first career page URL in under 60 seconds.
During the free trial you get:
- ✅ Full access to all supported ATS platforms (Greenhouse, Lever, Ashby, and more)
- ✅ All output fields — title, salary, skills, location, department, apply link
- ✅ Remote filter, keyword filter, department filter — all active
- ✅ Bulk URL processing — scrape multiple career pages in one run
- ✅ Complete JSON output ready for CRM or database import
💳 Paid Plan — $10.99/Month
After the free trial, continue with $10.99/month — less than the cost of a single LinkedIn job posting. This gives you:
- ✅ Unlimited runs — scrape as many career pages as you need, as often as you want
- ✅ All ATS platforms — Greenhouse, Lever, Ashby, Workday, BambooHR, and more
- ✅ Full data — salary, skills, remote flag, experience level, department
- ✅ Apify platform features — scheduling, webhooks, API integration
- ✅ Priority support — fast responses via actor page
💡 What $10.99/Month Gets You vs Alternatives
| Tool | Price | Data Source | Freshness | Skills |
|---|---|---|---|---|
| This Career Page Job Scraper | $10.99/mo | Direct company pages | ✅ Real-time | ✅ Auto-extracted |
| LinkedIn Recruiter | $835/mo | LinkedIn listings | ✅ Fresh | ❌ Manual |
| Indeed Resume | $100+/mo | Indeed listings | ✅ | ❌ |
| Greenhouse subscription | $6,000+/yr | Only your company | ✅ | ❌ |
| Manual research | Free | Anywhere | ✅ | ❌ |
🎯 $10.99/month gives you talent market intelligence that companies pay thousands for. Start with the free trial today.
🏗️ Supported ATS Platforms
This career page job scraper natively supports 8 major ATS platforms plus any generic career page:
Tier 1 — Full JSON Extraction (Highest Accuracy)
🌱 Greenhouse
Used by: Stripe, Airbnb, Dropbox, Figma, Notion, Robinhood, and thousands more.
This career page job scraper extracts Greenhouse jobs using three methods in priority order: __NEXT_DATA__ JSON from the React app → inline JSON blobs → Greenhouse public API (boards-api.greenhouse.io). This triple-method approach means the actor succeeds even when Greenhouse updates their frontend.
Supported URL formats:
https://boards.greenhouse.io/stripehttps://boards.greenhouse.io/airbnbhttps://www.greenhouse.io/careers (company-hosted)
🎯 Lever
Used by: Netflix, Reddit, Shopify, Atlassian, Duolingo, and many more.
Lever jobs are extracted from window.LeverPostings JavaScript variable first, then __NEXT_DATA__, then HTML selectors as final fallback — three extraction layers for maximum coverage.
Supported URL formats:
https://jobs.lever.co/netflixhttps://jobs.lever.co/shopify
🌟 Ashby
Used by: Linear, Vercel, Railway, Retool, and fast-growing startups.
Ashby is a Next.js SPA. This career page job scraper navigates the __NEXT_DATA__ JSON tree using multiple known data paths (jobPostings, initialJobPostings, company.jobPostings) with JSON-LD fallback.
Supported URL formats:
https://jobs.ashbyhq.com/linearhttps://jobs.ashbyhq.com/vercel
Tier 2 — HTML + JSON-LD Extraction
| ATS | Companies Using It | Extraction Method |
|---|---|---|
| Workday | Walmart, Target, Microsoft | HTML + JSON-LD |
| Smartrecruiters | Visa, Bosch, KPMG | HTML cards + JSON-LD |
| BambooHR | Mid-size companies | HTML selectors |
| Recruitee | European companies | HTML + JSON-LD |
| Teamtailor | Scandinavian companies | HTML + JSON-LD |
Tier 3 — Generic HTML Parser
Any company career page not using the above ATS platforms is handled by the generic parser, which tries three methods in sequence:
- JSON-LD
JobPostingschema — reads structured job data if the page uses schema.org markup - HTML card detection — searches for job cards using 8 common class-name patterns
- Link scan fallback — scans all page links for job-related keywords (
/jobs/,/careers/,/apply/)
🎯 Use Cases
🔍 Competitive Talent Intelligence
Use this career page job scraper to monitor what roles your competitors are hiring for — updated daily. Know before your board does that a rival is building an AI team or expanding into a new market.
📊 Hiring Trend Analysis
Track which skills, roles, and departments companies are growing fastest by scraping their career pages weekly. Build charts showing month-over-month hiring velocity by department or role type.
🏗️ Building a Niche Job Board
Aggregate job listings from dozens of companies in a specific industry (fintech, climate tech, SaaS, healthcare) without paying job board listing fees. This career page job scraper feeds your job board directly from company sources.
💼 Recruiting & Headhunting
Build target prospect lists by identifying which companies are actively hiring for specific roles. Use salary data and required skills to qualify leads before outreach.
📈 Workforce & Market Research
Analyze hiring patterns across an industry to understand which technologies are growing in demand, which roles are being replaced by AI, or how remote work policies are evolving company by company.
🤖 HR Tech & ATS Integration
Feed live job data from company career pages into your own HR platform, talent marketplace, or AI matching engine. This career page job scraper provides clean, structured JSON that integrates with any system.
🔔 Job Alert Automation
Schedule this career page job scraper to run daily and use Apify webhooks to send new job alerts to Slack, email, or a custom dashboard — faster than any generic job alert service.
📋 Salary & Compensation Research
Collect salary range data from job listings at scale. Build compensation benchmarks across companies, roles, and locations using the Salary_Range field extracted wherever companies disclose pay.
📊 What Data Is Extracted?
This career page job scraper extracts the following data per job listing:
📄 Core Job Fields
- Job Title — full role title exactly as posted
- Job ID — unique identifier (ATS-specific or generated)
- Department — team or function (Engineering, Product, Sales, Finance, etc.)
- Job Type — Full-time, Part-time, Contract, Intern
- Posted Date — when the job was published (where available)
📍 Location & Remote
- Location — city, state, country, or "See posting"
- Remote — boolean flag (
true/false) — auto-detected from title and location text
💰 Compensation
- Salary Range — extracted from job description text where disclosed (e.g.
$120,000 - $160,000/yr)
🧠 Intelligence Fields
- Experience Level — auto-detected: Intern, Junior, Mid-Level, Senior, Staff/Principal, Manager
- Skills — up to 12 technical skills detected from title and description
🔗 Links
- Career Link — direct URL to the full job posting page
- Company Career URL — the career page URL that was scraped
🔧 Meta Fields
- ATS Platform — which ATS was detected (Greenhouse, Lever, Ashby, etc.)
- Timestamp — ISO extraction time
🧠 Smart Detection Features
Experience Level Auto-Detection
This career page job scraper automatically assigns an experience level to every job based on keywords in the title:
| Level | Keywords Detected |
|---|---|
| Intern | intern, internship, co-op |
| Junior | junior, jr., associate, entry, new grad |
| Mid-Level | (default — no explicit level keyword) |
| Senior | senior, sr., lead |
| Staff / Principal | staff, principal, vp, head of, chief, director |
| Manager | manager, director, vp, head |
Remote Job Detection
Remote status is auto-detected from title and location text containing: remote, work from home, wfh, distributed, anywhere, flexible.
Salary Range Extraction
Salary data is extracted using regex pattern matching on job description text. Detects formats like:
$120,000 - $160,000/yr$85K - $110K$45/hr$200,000
📋 Output Fields (Full Reference)
Every record from this career page job scraper contains:
| Field | Type | Description | Example |
|---|---|---|---|
Job_ID | string | Unique job ID (ATS-native or generated) | "GH-4892731", "LVR-abc123" |
Title | string | Full job title | "Senior Software Engineer, Backend" |
Location | string | City, state/country, or "See posting" | "San Francisco, CA", "Remote" |
Department | string | Team or function | "Engineering", "Product", "Sales" |
Career_Link | string | Direct URL to the job posting | "https://boards.greenhouse.io/stripe/jobs/..." |
Job_Type | string | Employment type | "Full-time", "Contract", "Intern" |
Salary_Range | string | Compensation range (if disclosed) | "$120,000 - $160,000", null |
Description | string | Job description excerpt (max 500 chars) | "We are looking for a..." |
Posted_Date | string | Publication date (YYYY-MM-DD) | "2024-11-01" |
Remote | boolean | Whether the role is remote | true or false |
Experience_Level | string | Auto-detected seniority | "Senior", "Junior", "Mid-Level" |
Skills | array | Auto-detected required skills (max 12) | ["Python", "AWS", "PostgreSQL"] |
ATS_Platform | string | Detected ATS system | "Greenhouse", "Lever", "Ashby" |
Company_Career_URL | string | Source career page URL | "https://boards.greenhouse.io/stripe" |
Timestamp | string | ISO extraction timestamp | "2024-11-01T10:30:00Z" |
⚙️ Input Parameters
{"career_page_urls": ["https://boards.greenhouse.io/stripe","https://jobs.lever.co/shopify","https://jobs.ashbyhq.com/linear"],"keyword": "engineer","remote_only": false,"department": "Engineering","job_type_filter": "Full-time","max_results": 100,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
| Parameter | Type | Default | Description |
|---|---|---|---|
career_page_urls | array | [] | List of career page URLs to scrape. Accepts Greenhouse, Lever, Ashby, and any ATS or custom career page. |
career_page_url | string | "" | Single career page URL shortcut — automatically added to the list |
keyword | string | "" | Only return jobs containing this keyword in the title. Example: "engineer", "product", "data" |
remote_only | boolean | false | Set to true to return only remote-flagged jobs |
department | string | "" | Filter by department name. Example: "Engineering", "Marketing", "Sales" |
job_type_filter | string | "" | Filter by job type: "Full-time", "Part-time", "Contract", "Intern" |
max_results | integer | 100 | Maximum total jobs to return across all URLs |
proxyConfiguration | object | Off | Apify proxy configuration — recommended for large-scale runs |
📦 Example Inputs & Outputs
Example 1: Scrape Greenhouse Career Page (Stripe)
Input:
{"career_page_url": "https://boards.greenhouse.io/stripe","keyword": "engineer"}
Output:
[{"Job_ID": "GH-6234891","Title": "Senior Software Engineer, Payments Infrastructure","Location": "San Francisco, CA","Department": "Engineering","Career_Link": "https://boards.greenhouse.io/stripe/jobs/6234891","Job_Type": "Full-time","Salary_Range": "$180,000 - $250,000","Description": "We are looking for a Senior Software Engineer to join our Payments Infrastructure team...","Posted_Date": "2024-11-01","Remote": false,"Experience_Level":"Senior","Skills": ["Python", "Go", "PostgreSQL", "Kafka", "AWS", "Docker", "Kubernetes"],"ATS_Platform": "Greenhouse","Company_Career_URL": "https://boards.greenhouse.io/stripe","Timestamp": "2024-11-10T08:30:00Z"}]
Example 2: Scrape Multiple ATS Career Pages
Input:
{"career_page_urls": ["https://boards.greenhouse.io/airbnb","https://jobs.lever.co/shopify","https://jobs.ashbyhq.com/linear"],"remote_only": true,"max_results": 50}
Output: Up to 50 remote job records from all three companies — unified in a single structured dataset regardless of each company's ATS system.
Example 3: Find All Senior Engineering Roles
Input:
{"career_page_urls": ["https://boards.greenhouse.io/notion","https://boards.greenhouse.io/figma","https://jobs.lever.co/duolingo","https://jobs.ashbyhq.com/vercel"],"keyword": "senior","department": "Engineering"}
Output: All senior engineering jobs from 4 top companies — with salary ranges (where disclosed), required skills, and direct apply links.
Example 4: Intern Hunting Across Startups
Input:
{"career_page_urls": ["https://boards.greenhouse.io/robinhood","https://jobs.lever.co/reddit","https://jobs.ashbyhq.com/railway"],"job_type_filter": "Intern","max_results": 30}
Output: All internship listings across 3 companies filtered by job type, with location, department, and apply links.
Example 5: Generic Career Page (Non-ATS)
Input:
{"career_page_url": "https://www.tesla.com/careers","keyword": "data scientist","max_results": 20}
Output: Jobs extracted from Tesla's custom career portal using JSON-LD schema detection and HTML card fallback parsing.
🔧 ATS-Specific Extraction Guide
How Greenhouse Extraction Works
The actor first reads the __NEXT_DATA__ JSON embedded in the Greenhouse React app page, traversing known data paths (props.pageProps.initialData.jobs, props.pageProps.jobs). If that returns nothing, it extracts the company slug from the URL and calls the Greenhouse public API (boards-api.greenhouse.io/v1/boards/{slug}/jobs) directly — no API key needed. This dual approach handles both frontend-rendered and API-served Greenhouse boards.
How Lever Extraction Works
Lever embeds job data directly in a window.LeverPostings JavaScript variable on the page. The actor reads this first using regex extraction. If absent, it reads __NEXT_DATA__ JSON. If both fail, it falls back to Lever's known HTML CSS selectors (.posting, [data-qa='posting']). Three layers means near-100% reliability on any Lever board.
How Ashby Extraction Works
Ashby is a pure Next.js app — all data lives in __NEXT_DATA__. The actor walks multiple known data paths to find the job postings array, then falls back to JSON-LD JobPosting schema if the Next.js data structure has changed.
How Generic Pages Work
For any ATS not listed above, the actor tries: JSON-LD schema.org JobPosting markup → HTML job card selectors (8 patterns) → link scan for job-related URLs. Most modern company career sites using React, WordPress, or Webflow can be parsed successfully.
🎛️ Filtering Options
All filters are applied after extraction — the actor fetches all jobs first, then filters. This ensures the filter is applied consistently regardless of whether the ATS supports server-side filtering.
Keyword Filter (keyword)
Only returns jobs where the keyword appears in the job title. Case-insensitive.
keyword: "machine learning" → Senior Machine Learning Engineer, ML Research Leadkeyword: "design" → Product Designer, UX Design Lead, Brand Designerkeyword: "sales" → Account Executive, Sales Development Representative
Remote Only (remote_only: true)
Returns only jobs where remote status was detected as true. Detection uses: "remote", "work from home", "wfh", "distributed", "anywhere", "flexible" in title or location.
Department Filter (department)
Returns only jobs where the department contains the filter string. Case-insensitive partial match.
department: "Engineering" → Engineering, Software Engineering, Data Engineeringdepartment: "Product" → Product, Product Management, Product Design
Job Type Filter (job_type_filter)
Returns only jobs matching the employment type.
job_type_filter: "Full-time"job_type_filter: "Contract"job_type_filter: "Intern"
🧰 Skill Detection List
This career page job scraper automatically detects 40+ technical skills from job titles and descriptions:
Languages: Python, JavaScript, TypeScript, Java, Go, Rust, Ruby, Swift, Kotlin, C++, C#
Frontend: React, Angular, Vue
Backend: Node.js, Django, FastAPI, Flask
Databases: SQL, PostgreSQL, MySQL, MongoDB, Redis, Elasticsearch, DynamoDB
Cloud & DevOps: AWS, GCP, Azure, Docker, Kubernetes, Terraform
Data & AI: Kafka, Spark, Machine Learning, Deep Learning, LLM, NLP, Computer Vision, PyTorch, TensorFlow
Design: Figma, Sketch, UX, UI
Process: Agile, Scrum
Skills are returned as a clean array in the Skills field — max 12 per job.
🌐 Proxy Configuration
Recommended Setup
{"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
When to Use Proxy
- Scraping 10+ career pages in one run
- Any page returning 403 or 401 errors
- Career pages hosted behind Cloudflare or similar protection (common for large enterprise sites like Workday)
- Running this career page job scraper on a daily schedule
When Proxy Is Optional
- Small runs of 1–5 career pages
- Greenhouse and Lever boards (these are lightly protected public pages)
- One-off lookups on a single career URL
The actor uses curl_cffi with Chrome 110 browser impersonation, which bypasses basic bot detection even without a proxy for smaller volumes.
⚡ Performance & Speed
Speed Benchmarks
| Mode | Career Pages | Jobs Extracted | Estimated Time |
|---|---|---|---|
| Single Greenhouse board | 1 | ~20–200 | ~10–20 seconds |
| Single Lever board | 1 | ~20–100 | ~10–15 seconds |
| Single Ashby board | 1 | ~10–50 | ~10–20 seconds |
| Multi-company batch | 5 | ~100 | ~1–2 minutes |
| Multi-company batch | 20 | ~400 | ~5–8 minutes |
| Large batch | 50 | ~1000 | ~15–20 minutes |
Rate Limiting
The actor applies a 1.5–3 second random delay between career page requests to avoid triggering rate limits. This makes it safe to run large batches without getting blocked.
Scheduling for Daily Monitoring
Use Apify's built-in scheduler to run this career page job scraper every day at a set time. Combine with a webhook to push new job results to Slack, email, Google Sheets, or your ATS automatically.
❓ FAQ
Q: What is the difference between this and a job board like Indeed or LinkedIn? A: Job boards show you what companies chose to post — often delayed, sometimes incomplete, and always filtered through the board's algorithm. This career page job scraper goes directly to each company's own career page and extracts every live job, exactly as the company posted it, in real time.
Q: Does this work for Workday career pages? A: Workday pages are partially supported via HTML + JSON-LD extraction. Workday is a complex Java SPA and some pages may require additional selectors. If a Workday page is not extracting correctly, contact us via the actor page.
Q: Why are some jobs missing a salary range?
A: Most companies do not disclose salary in job postings. The Salary_Range field is only populated when the company explicitly states compensation in the job description text. In regions where salary disclosure is required by law (e.g. Colorado, New York, California), coverage is much higher.
Q: Can I scrape LinkedIn company job pages? A: LinkedIn blocks automated access and is not supported. This career page job scraper is designed for direct company career pages, not job boards.
Q: How fresh is the data? A: Completely fresh — every run fetches live data directly from the career page. There is no caching. Jobs posted an hour ago will appear in your results.
Q: What does the 2-hour free trial include? A: Everything. All ATS platforms, all filters, all output fields, full JSON output. After 2 hours, subscribe for $10.99/month to continue with unlimited runs.
Q: Can I use this to build a job board? A: Yes — many users build niche job boards using this career page job scraper as their data source. JSON output integrates cleanly with any database or CMS. Ensure you comply with each company's Terms of Service regarding data reuse.
Q: What if a career page uses a custom ATS I have not listed? A: The generic HTML parser handles most custom career pages. It tries JSON-LD schema detection first, then HTML card patterns, then link scan. Success rate on custom pages is lower than on named ATS platforms but still covers the majority of modern career sites.
Q: Can I get the full job description text?
A: The Description field returns up to 500 characters of the job description. For full descriptions, use the Career_Link URL to fetch the individual job posting page.
Q: How do I set up daily job monitoring? A: Go to your actor run page → Schedules → Create Schedule. Set it to run daily at your preferred time. Add a webhook to automatically send new results to Slack, email, or your preferred destination.
📜 Changelog
v2.0.0 (Current)
- ✅ Greenhouse: added
__NEXT_DATA__JSON extraction + public API fallback via board slug - ✅ Lever: added
window.LeverPostingsextraction as primary method - ✅ Ashby: improved
__NEXT_DATA__traversal with 5 known data paths - ✅ All ATSs: JSON-first approach with HTML fallback — significantly higher success rate
- ✅ 404 handling: follows redirects, tries alternate URL variants
- ✅ Salary range auto-extraction from description text
- ✅ Experience level auto-detection (Intern → Staff/Principal)
- ✅ Skills auto-detection — 40+ technical skills
- ✅ Remote flag auto-detection
- ✅ Department, job type, and remote-only filters
- ✅ JSON-LD
JobPostingschema support for generic pages - ✅ 3-method link scan fallback for unknown ATS platforms
v1.0.0
- ✅ Initial release with Greenhouse and Lever support
- ✅ Basic HTML card extraction for generic pages
- ✅ Keyword filtering
- ✅ JSON output
⚖️ Legal & Terms of Use
This career page job scraper collects publicly accessible job posting data from company career pages — the same information visible to anyone visiting those pages in a browser.
Please follow these guidelines:
- Use extracted job data for legitimate recruiting, research, aggregation, and talent intelligence purposes
- Respect each company's Terms of Service regarding data reuse — some companies prohibit automated scraping of their career pages
- Do not use this tool to scrape personal candidate data, employee information, or any gated content
- Do not use extracted data to impersonate job postings or misrepresent employment opportunities
- Job posting data (titles, descriptions, salaries) is generally considered public factual information — its use for research and aggregation is broadly accepted
🤝 Support & Feedback
- Bug report or broken ATS? Contact us via the Apify actor page — we fix broken parsers fast
- Need a new ATS added? Request it via the actor page or Apify Community forum
- Loving it? Please leave a ⭐ review — it helps other recruiters find this career page job scraper!
🆓 2-hour free trial → 💳 $10.99/month after — the most complete career page job scraper on the Apify platform.
Built with ❤️ on Apify · Career Page Job Scraper for Greenhouse, Lever, Ashby & More
Extract live job listings from any company career page — fresh data, smart filters, zero job board fees