Stack Overflow Profile Scraper — Bulk CSV API avatar

Stack Overflow Profile Scraper — Bulk CSV API

Pricing

from $2.80 / 1,000 results

Go to Apify Store
Stack Overflow Profile Scraper — Bulk CSV API

Stack Overflow Profile Scraper — Bulk CSV API

Collect public Stack Overflow profile, reputation, tag and bio fields; only explicitly published contacts. Bulk export: JSON, CSV, Excel and API. PPE: $2.8/1K profiles; start fee extra.

Pricing

from $2.80 / 1,000 results

Rating

0.0

(0)

Developer

Apivault Labs

Apivault Labs

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

2 days ago

Last modified

Share

Stack Overflow Profile Scraper — Reputation, Tags & Public Bio

Look up public Stack Overflow developer profiles by URL or user ID. Get exact reputation, separate answer/question counts, badge counts, public bio, website and up to five contribution tags. Use this to enrich a known developer shortlist or compare public contributions in a workflow.

No Stack Exchange key is required. Running through the Apify API requires your Apify token. This Actor uses the official public Stack Exchange API; its data can be cached and its anonymous quota is shared by source IP. It does not guarantee real-time freshness, private email access, verified identities or unlimited throughput.

Quick start

{
"profileUrls": [
"https://stackoverflow.com/users/22656/jon-skeet",
"https://stackoverflow.com/users/1144035/gordon-linoff"
],
"maxProfiles": 100,
"maxConcurrency": 3,
"timeout": 90
}

You can also supply a positive user ID string such as "22656". Profile slugs and tracking parameters are removed before deduplication. Only public stackoverflow.com/users/ID profiles are accepted; Stack Exchange sibling sites, Teams, question/search URLs, private addresses and URLs containing credentials are rejected.

Omitting profileUrls runs the sample profile and can incur the usual result/start charges. An explicit "profileUrls": [] returns an empty Dataset and summary; the start charge still applies. Up to 1,000 input entries are accepted, with at most 100 unique valid profiles collected. maxProfiles applies after canonical deduplication; capped inputs are counted in SUMMARY. Results follow input order.

Field selection and meaning

All selectors default to true. Existing selector names remain compatible with earlier integrations.

Input selectorOutputMeaning
extractUsernameusernamePublic display name, not a unique handle.
extractFullNamefullNameCompatibility alias of that display name; not a verified legal name.
extractBiobio, socialLinksPlain-text public about-me bio and HTTP(S) links in it; links can include books or blogs as well as social profiles. External sites are not fetched.
extractLocationlocationPublicly provided location; blank when absent.
extractFollowersreputationExact reputation integer. This legacy selector does not return followers or people reached.
extractPostsanswerCount, questionCountSeparate source integers; missing counts are null, not invented zeroes.
extractProfileUrlprofileUrlCanonical profile URL. Attribution and input URL remain in metadata.
extractEmailemailFirst email explicitly written in public bio text or a mailto link. Blank when absent; no guessing or email verification.
extractWebsitewebsitePublic profile website URL.
extractCategoryspecializationUp to five official top contribution tag names, joined as text. Tags are not verified professional skills.
extractMetadataotherMetadataBadges, member-since/update timestamps, collectives when returned, and top tags with counts and scores.

otherMetadata.topTagsLimit is 5. topTagsHasMore: true means more tags exist; this Actor intentionally returns only the first five. If optional tag enrichment fails, core profiles can still be delivered, with topTagsHasMore: null and a WARNINGS record. Unknown source fields remain blank or null. There is no full tag history, follower/reach metric, question/answer text, catalog search or developer discovery by skill.

Every paid row must match the requested user ID, contain a public name and valid reputation, and contain useful selected fields. Selecting only a URL, unavailable email, or disabling every field produces NO_SELECTED_DATA and no paid profile row.

Output

Illustrative subset; names and counts change over time:

{
"success": true,
"userId": 22656,
"inputUrl": "https://stackoverflow.com/users/22656",
"username": "Jon Skeet",
"fullName": "Jon Skeet",
"reputation": 1530000,
"answerCount": 35805,
"questionCount": 56,
"website": "http://csharpindepth.com",
"specialization": "c#, java, .net, linq, string",
"profileUrl": "https://stackoverflow.com/users/22656",
"source": "Stack Exchange API",
"attributionUrl": "https://stackoverflow.com/users/22656",
"identityValidated": true,
"freshnessVerified": false,
"fullNameVerified": false,
"observedAt": "2026-10-11T20:00:00+00:00"
}

Only selected profile fields are returned, plus collection/identity/attribution metadata. observedAt is collection time, not the source's last update. identityValidated means the public profile ID matched; it does not verify a person's real-world identity. Use profile attribution links when redistributing bio content and follow the source's applicable content license.

Results, errors and retries

  • Dataset: useful profile rows only, exportable as JSON/CSV/Excel.
  • SUMMARY: requested, uniqueRequested, delivered, failed, duplicates, capped, warnings, apiRequests, quotaRemaining and status.
  • ERRORS: rejected input, missing profile, invalid response or source access/quota errors. Invalid URLs are not echoed; errors are not paid Dataset rows.
  • WARNINGS: optional top-tags failures with affected user ID and safe retry advice.
  • RETRY_INPUT: canonical URLs for retryable profile or enrichment failures. A retry can charge again for a newly delivered profile; inspect existing results first.

All failed profiles cause a FAILED run with no profile-result events. Mixed successes/errors or core profiles with enrichment warnings are SUCCEEDED with SUMMARY.status: "partial". An explicit empty list is SUCCEEDED with zero results. Read the counts and reports; run status alone does not prove complete data.

The official API can return quota exhaustion, rate limiting or backoff. The Actor batches core profile lookup, spaces requests and honors source backoff; it does not rotate proxies to bypass quota. Optional tag workers are bounded by maxConcurrency (1–20), while actual API requests are serialized. Source failure is reported rather than converted to an empty successful profile. No private upstream diagnostics or credentials are exposed.

API and n8n

curl -X POST \
'https://api.apify.com/v2/acts/I2ZH6abZW68mjgh01/runs' \
-H 'Authorization: Bearer YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"profileUrls":["22656"],"maxProfiles":1}'

Poll the returned run ID until completion, then read its defaultDatasetId and defaultKeyValueStoreId reports. In n8n use an HTTP Request node with the same URL, Bearer token and JSON body. The permanent Actor ID avoids depending on its historical stackowerflow-scraper slug spelling.

MCP and AI agents

Connect the hosted Apify MCP server and select apivault_labs/stackowerflow-scraper (Actor ID I2ZH6abZW68mjgh01). Ask the agent:

Run this Actor for Stack Overflow users 22656 and 1144035, maxProfiles 2. Wait for completion, then read Dataset plus SUMMARY, ERRORS and WARNINGS. Report reputation, separate answer/question counts, public website and top contribution tags. Say whether enrichment was partial. Do not infer missing email, private identity or current availability for recruiting.

Actor input is the same through the UI, API and MCP. Apify authentication is required.

Pricing

  • $0.0028 per useful profile ($2.80 per 1,000 profiles).
  • $0.00005 Actor start event per allocated GB, minimum one event. At the default 256 MB this is $0.00005 per run.
  • No profile events for duplicates, capped input, errors or empty results.
  • Platform usage is currently included. The already announced change to separate user-paid platform usage takes effect October 18, 2026 at 19:31 UTC (22:31 Minsk). After that, compute/storage/transfer usage is additional; event rates remain unchanged.

One delivered profile currently has $0.00285 in Actor events. After the scheduled change add actual platform usage; there is no guaranteed all-in unit cost. Credit availability and platform plan limits vary, so no fixed number of free profiles is promised.

FAQ

Does the official API require a key? Public read methods used here work without a Stack Exchange key. Anonymous access has a shared limited quota and cached responses. Apify API access still requires your Apify token.

Can it find developers by skill? Supply known profile URLs/IDs. The Actor returns their top contribution tags; it does not search the developer directory or judge employment skills.

Does every profile contain an email? No. The source has no public account-email field. Only an address explicitly written in the public bio or mailto link is extracted. Missing email is normal.

Can it return a private profile or Stack Overflow Teams data? No. Public Stack Overflow profiles only.

Why keep the old slug? Existing API/MCP integrations use it. The title and documentation use the correct Stack Overflow spelling; the permanent Actor ID is stable.

Source documentation: users by ID, user fields, custom filters, quota/backoff. This Actor is independent of Stack Overflow and Stack Exchange.