Contra Freelancers & Projects Scraper
Pricing
Pay per event
Contra Freelancers & Projects Scraper
Find Contra freelancers and portfolio projects from public hire pages. Export profiles, bios, locations, social links, likes, and impressions.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
12 days ago
Last modified
Categories
Share
Scrape public Contra hire directories, freelancer profiles, portfolio project cards, social links, locations, bios, likes, and impressions.
What does Contra Freelancers & Projects Scraper do?
Contra Freelancers & Projects Scraper turns public Contra marketplace pages into clean lead-generation data.
It can start from Contra hire category pages such as https://contra.com/hire/web-developers, public profile URLs, or category slugs such as web-developers.
The actor extracts freelancer and project records from server-rendered HTML, then optionally enriches profile rows from public JSON-LD embedded in Contra profile pages.
Who is it for?
Recruiters use it to source independent specialists.
Agencies use it to map partner ecosystems.
Founders use it to discover designers, developers, marketers, and no-code builders.
Sales teams use it to build targeted outreach lists from public Contra portfolio signals.
Market researchers use it to understand which categories and project types are active on Contra.
Why use this actor?
- ✅ Public Contra data without browser automation overhead
- ✅ Profile and portfolio project URLs in one dataset
- ✅ Optional profile enrichment for bio, location, avatar, and social URLs
- ✅ Likes and impressions when visible on directory project cards
- ✅ Low default result limits for safe first runs
- ✅ Designed for Apify integrations, webhooks, datasets, and MCP workflows
What data can I extract?
| Field | Description |
|---|---|
sourceUrl | Contra page that produced the row |
itemType | project or profile |
profileUrl | Public Contra freelancer profile URL |
username | Contra username parsed from the profile URL |
name | Freelancer or profile name |
headline | Public profile headline / job title |
role | Inferred role/category |
category | Inferred Contra hire category |
location | Public profile location when available |
bio | Public profile description when available |
avatarUrl | Public avatar image URL |
projectTitle | Portfolio project title |
projectUrl | Public Contra project URL |
likes | Visible project like count |
impressions | Visible project impression count |
socialUrls | Public JSON-LD sameAs links |
scrapedAt | ISO timestamp for the scrape |
How much does it cost to scrape Contra freelancers?
This actor uses formula-derived pay-per-event pricing: a small run-start event plus a tiered fee for each saved result.
| Event | When charged | Price |
|---|---|---|
| Run started | Once per run | $0.005 |
| Result extracted — FREE tier | Each saved profile/project row | $0.000082322 per result |
| Result extracted — BRONZE tier | Each saved profile/project row | $0.000071585 per result |
| Result extracted — SILVER tier | Each saved profile/project row | $0.000055836 per result |
| Result extracted — GOLD tier | Each saved profile/project row | $0.000042951 per result |
| Result extracted — PLATINUM tier | Each saved profile/project row | $0.000028634 per result |
| Result extracted — DIAMOND tier | Each saved profile/project row | $0.000020044 per result |
Example costs before Apify platform discounts or plan-specific billing adjustments:
- 100 BRONZE-tier results:
$0.005 + (100 × $0.000071585) ≈ $0.0122 - 1,000 BRONZE-tier results:
$0.005 + (1,000 × $0.000071585) ≈ $0.0766 - 1,000 FREE-tier results:
$0.005 + (1,000 × $0.000082322) ≈ $0.0873
You can control spend with maxItems and maxProfileRequests.
How to scrape Contra hire pages
- Open the actor on Apify.
- Keep the prefilled
https://contra.com/hire/web-developersURL or add your own Contra URLs. - Set
maxItemsto a small number for the first run. - Keep
includeProjectsenabled to collect portfolio cards. - Keep
includeProfilesenabled if you want profile enrichment. - Run the actor.
- Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML.
Input configuration
startUrls
Contra pages to scrape.
Recommended examples:
https://contra.com/hire/web-developershttps://contra.com/hire/framer-developershttps://contra.com/coreyward
hireCategorySlugs
Shortcuts for Contra hire pages.
For example, web-developers becomes https://contra.com/hire/web-developers.
maxItems
Maximum number of rows saved across all input pages.
includeProfiles
When enabled, profile rows are included and project rows can be enriched from public profile pages.
includeProjects
When enabled, portfolio project cards are saved.
maxProfileRequests
Caps extra profile-page requests used for enrichment.
Example input
{"startUrls": [{ "url": "https://contra.com/hire/web-developers" }],"maxItems": 20,"includeProfiles": true,"includeProjects": true,"maxProfileRequests": 20}
Example output
{"sourceUrl": "https://contra.com/hire/web-developers","itemType": "project","profileUrl": "https://contra.com/coreyward","username": "coreyward","name": "Corey Ward","headline": "I build websites for awesome clients!","location": "Austin","projectTitle": "Figma Website by Corey Ward","projectUrl": "https://contra.com/p/QXY3ZkOb-figma-website","likes": 22,"impressions": 1753,"scrapedAt": "2026-06-05T09:19:37.058Z"}
Tips for better results
Start with a specific hire category.
Keep maxItems low for testing.
Increase maxProfileRequests only when you need enriched bios and social URLs.
Use profile URLs directly when you want a single known freelancer profile.
Use includeProjects=false for profile-only lead lists.
Use includeProfiles=false for fast portfolio-card extraction.
Integrations
Send new Contra leads to a CRM through Apify webhooks.
Export datasets to Google Sheets for recruiter review.
Use Make or Zapier to alert a Slack channel when new profile rows are collected.
Connect the dataset to enrichment tools for email discovery.
Schedule recurring runs for category monitoring.
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/contra-freelancers-projects-scraper').call({hireCategorySlugs: ['web-developers'],maxItems: 25,});console.log(run.defaultDatasetId);
Python
from apify_client import ApifyClientclient = ApifyClient('APIFY_TOKEN')run = client.actor('automation-lab/contra-freelancers-projects-scraper').call(run_input={'hireCategorySlugs': ['web-developers'],'maxItems': 25,})print(run['defaultDatasetId'])
cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~contra-freelancers-projects-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"hireCategorySlugs":["web-developers"],"maxItems":25}'
MCP usage
Use this actor from Claude Desktop, Claude Code, or other MCP clients through Apify MCP.
MCP URL:
https://mcp.apify.com/?tools=automation-lab/contra-freelancers-projects-scraper
Claude Code setup:
$claude mcp add apify-contra "https://mcp.apify.com/?tools=automation-lab/contra-freelancers-projects-scraper"
Claude Desktop JSON config:
{"mcpServers": {"apify-contra": {"url": "https://mcp.apify.com/?tools=automation-lab/contra-freelancers-projects-scraper"}}}
Example prompts:
- "Scrape 25 Contra web developer project cards and summarize the top profiles."
- "Find Contra Framer developers with public portfolio projects."
- "Create a CSV of Contra freelancer profiles with locations and social links."
Data quality notes
Contra page layouts can change.
The actor avoids brittle CSS class dependencies where possible.
Profile enrichment uses public JSON-LD when available.
Some profile details, rates, or availability may not be publicly visible on every page.
Proxy and performance
The actor is HTTP-first and does not require a browser for the tested pages.
It does not configure residential proxies by default.
Profile enrichment adds extra HTTP requests, so cap maxProfileRequests when testing.
Legality
This actor extracts public web data.
You are responsible for using the output in accordance with applicable laws, Contra terms, privacy rules, and outreach regulations.
Do not use scraped data for spam, harassment, or discriminatory profiling.
FAQ
Is it legal to scrape Contra public pages?
This actor collects public web data, but you must evaluate your own use case, jurisdiction, and compliance requirements.
Troubleshooting
Why did I get fewer rows than maxItems?
The selected page may expose fewer public cards than requested, or duplicate profile/project links may be skipped.
Why are hourly rates missing?
Hourly rates are not always visible in the public HTML tested during development. The actor focuses on stable public profile and project signals.
Why are social URLs missing?
Social URLs are collected only when Contra exposes them in public profile JSON-LD.
Related scrapers
- https://apify.com/automation-lab/upwork-scraper
- https://apify.com/automation-lab/linkedin-profile-scraper
- https://apify.com/automation-lab/github-users-scraper
- https://apify.com/automation-lab/website-content-crawler
Changelog
Initial version extracts public Contra hire directory project cards and profile data with optional profile enrichment.
Support
If a page stops extracting expected fields, share the run URL and input so the parser can be updated.
Limitations
The actor does not log in.
It does not message freelancers.
It does not bypass private content or account-only actions.
It does not guarantee availability of rates or availability labels when Contra does not expose them publicly.
Recommended first run
Use the default input and maxItems=20.
Review the dataset.
Then expand categories or limits once the fields match your workflow.