Contra Freelancers & Projects Scraper avatar

Contra Freelancers & Projects Scraper

Pricing

Pay per event

Go to Apify Store
Contra Freelancers & Projects Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldDescription
sourceUrlContra page that produced the row
itemTypeproject or profile
profileUrlPublic Contra freelancer profile URL
usernameContra username parsed from the profile URL
nameFreelancer or profile name
headlinePublic profile headline / job title
roleInferred role/category
categoryInferred Contra hire category
locationPublic profile location when available
bioPublic profile description when available
avatarUrlPublic avatar image URL
projectTitlePortfolio project title
projectUrlPublic Contra project URL
likesVisible project like count
impressionsVisible project impression count
socialUrlsPublic JSON-LD sameAs links
scrapedAtISO 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.

EventWhen chargedPrice
Run startedOnce per run$0.005
Result extracted — FREE tierEach saved profile/project row$0.000082322 per result
Result extracted — BRONZE tierEach saved profile/project row$0.000071585 per result
Result extracted — SILVER tierEach saved profile/project row$0.000055836 per result
Result extracted — GOLD tierEach saved profile/project row$0.000042951 per result
Result extracted — PLATINUM tierEach saved profile/project row$0.000028634 per result
Result extracted — DIAMOND tierEach 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

  1. Open the actor on Apify.
  2. Keep the prefilled https://contra.com/hire/web-developers URL or add your own Contra URLs.
  3. Set maxItems to a small number for the first run.
  4. Keep includeProjects enabled to collect portfolio cards.
  5. Keep includeProfiles enabled if you want profile enrichment.
  6. Run the actor.
  7. 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-developers
  • https://contra.com/hire/framer-developers
  • https://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 ApifyClient
client = 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

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.

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.

Use the default input and maxItems=20.

Review the dataset.

Then expand categories or limits once the fields match your workflow.