# Peerlist Scraper — Launches, Upvoters, Profiles & Jobs (`memo23/peerlist-scraper`) Actor

Scrape Peerlist with no login: Launchpad launches by week with rank, upvotes, product website and launch analytics, every upvoter and comment, maker and developer profiles with website, socials and skills, and the Peerlist job board with salary and skills.

- **URL**: https://apify.com/memo23/peerlist-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, Social media, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 launches

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Peerlist Scraper: Launchpad Launches, Upvoters, Profiles & Jobs

Scrape **Peerlist** (peerlist.io), the professional network for developers and designers: **Launchpad launches** by week with rank, upvotes, the product's own website and launch analytics, **every upvoter and comment** of a launch, **maker and developer profiles** with website, social links, GitHub and skills, and the **Peerlist job board** with salary, skills and apply links. No login, no cookies, no browser.

![How the Peerlist Scraper works](https://api.apify.com/v2/key-value-stores/rClOjWo9B9DPDPVwi/records/how-it-works-peerlist.png)

```json
{
  "mode": "launches",
  "launchpadWeeks": ["2026-W42"],
  "includeUpvoters": true,
  "includeMakerProfile": true
}
```

| Input | Rows |
|---|---|
| Nothing (Launches mode) | Every launch of the current Launchpad week, in rank order |
| `recentWeeks: 8` | The last 8 weeks of launches |
| A launch link | That launch, plus its upvoters and comments on request |
| A maker's profile link | Every product that maker has launched |
| Profile links or handles (Profiles mode) | One profile row each |
| Job filters (Jobs mode) | Matching jobs, newest first |

### Why Use This Scraper?

- **Every upvoter, not a sample.** One call returns everyone who upvoted a launch, with their headline, verified badge and upvote time. Warm leads for anyone launching in the same category.
- **The product's real website.** Launch rows carry the product's own URL, not only the Peerlist page, so you can enrich or contact the company straight away.
- **Launch analytics nobody else exports.** Page views, demo-link clicks and shares per day of the launch week.
- **Makers with their socials.** Website, X, LinkedIn, GitHub, Product Hunt, skills, years of experience and followers, merged into the launch row or as profile rows.
- **The job board with filters.** Role, skill, job type, country, remote / hybrid / office and posting date. Salary range, currency and unit come as numbers.
- **Fast and cheap.** About 1,600 rows in 16 seconds on 256 MB. From $1 per 1,000 rows.

### Use Cases

- **Launch lead generation**: pull the upvoters of competing or adjacent launches and reach out before your own launch.
- **Startup and product discovery**: track every new indie product, SaaS and AI tool launched each week, with its website and category.
- **Competitive tracking**: weekly winners, ranks, upvotes, ratings and traffic of launches in your category.
- **Developer and designer sourcing**: profiles with skills, experience, GitHub and personal sites.
- **Job market data**: tech and design jobs with salaries, skills and remote status, for job boards, newsletters and research.
- **Newsletters and digests**: a weekly list of top launches with taglines, links and makers.

### How It Works

1. **Launches mode** reads the Launchpad weeks you name (or the most recent ones) in rank order, 100 launches a call, plus any launch or maker links you paste.
2. For each launch it reads the launch page (website, description, tech tags, rating split) and its analytics, and on request the maker's profile, every upvoter and every comment.
3. **Profiles mode** reads each profile page. **Jobs mode** pages through the job board newest first, filtering on Peerlist's side where it can (roles, skills, job types, countries) and on ours for workplace and date.
4. Requests run a few at a time, retry with backoff, and the run stops cleanly at your row or spending limit.

### Input Configuration

| Field | Type | Description |
|---|---|---|
| `mode` | string | `launches` (default), `profiles` or `jobs` |
| `launchUrls` | array | Launch pages, Launchpad week links or maker profile links |
| `recentWeeks` | integer | Weeks to read when no links or weeks are given. Default 1 (the current week) |
| `launchpadWeeks` | array | `2026-W42`, `2026/42` or a week link. Weeks run Monday to Sunday |
| `maxLaunchesPerWeek` | integer | Top N launches of each week. 0 = the whole week |
| `minUpvotes` | integer | Skip launches below this. Default 0 |
| `includeLaunchDetails` | boolean | Website, description, tags, rating split. Default on |
| `includeAnalytics` | boolean | Page views, demo clicks, shares. Default on |
| `includeMakerProfile` | boolean | Maker's website, socials, skills on the launch row. Default off |
| `includeUpvoters` | boolean | One row per upvoter. Default off |
| `upvoterProfiles` | boolean | Add each upvoter's website, socials and skills (billed as a profile). Default off |
| `includeComments` | boolean | One row per comment and reply. Default off |
| `profiles` | array | Profiles mode: `https://peerlist.io/manuarora`, `@manuarora` or `manuarora` |
| `jobUrls` | array | Jobs mode: specific job pages |
| `jobRoles` | array | `Software Engineer`, `Product Designer`, `Backend Engineer`, ... |
| `jobSkills` | array | `React`, `Python`, `Figma`, ... (any of them matches) |
| `jobTypes` | array | `Full-time`, `Part-time`, `Internship`, `Freelance`, `Other` |
| `jobCountries` | array | Full names: `United States`, `India`, `United Kingdom` |
| `jobWorkplace` | array | `remote`, `hybrid`, `in-office` |
| `jobPostedWithinDays` | integer | 0 = the whole board |
| `maxItems` | integer | Cap on all rows. Default 1,000; free-plan runs return up to 100 |
| `proxy` | object | Apify datacenter proxy by default; Peerlist refuses cloud server IPs |

#### Example inputs

Top 50 launches of the last four weeks, with the makers' socials:

```json
{ "mode": "launches", "recentWeeks": 4, "maxLaunchesPerWeek": 50, "includeMakerProfile": true }
```

Everyone who upvoted three launches, with their websites:

```json
{
  "mode": "launches",
  "launchUrls": [
    "https://peerlist.io/pvkarty/project/ext-watch",
    "https://peerlist.io/manuarora/project/vibrant-design--best-of-the-internet"
  ],
  "includeUpvoters": true,
  "upvoterProfiles": true
}
```

Remote design jobs posted in the last 30 days:

```json
{ "mode": "jobs", "jobRoles": ["Product Designer", "UI/UX Designer"], "jobWorkplace": ["remote"], "jobPostedWithinDays": 30 }
```

### Output Overview

Every row has a `type`: `launch`, `upvoter`, `comment`, `profile` or `job`. The dataset has a table view for each. Upvoter and comment rows repeat the launch's id, title, link and week so each row stands on its own.

### Output Samples

Launch:

```json
{
  "type": "launch",
  "launchId": "PRJH9OBQ7DMG8LQ88H8988J9MBLMQE",
  "title": "Ext Watch",
  "tagline": "Chrome Web Store analytics: find ideas, make money",
  "launchUrl": "https://peerlist.io/pvkarty/project/ext-watch",
  "website": "https://extwatch.com",
  "launchWeek": "2026-W42",
  "launchedAt": "2026-10-12T00:30:00.704Z",
  "rank": 1,
  "weeklyRank": 1,
  "isWeeklyWinner": true,
  "upvotes": 160,
  "commentCount": 19,
  "bookmarks": 6,
  "averageRating": 5,
  "ratingIdea": 5,
  "ratingExecution": 5,
  "ratingDesign": 5,
  "categories": ["Analytics Tool", "SaaS", "Chrome Extension"],
  "tags": ["NextJS", "supabase", "Typescript", "Stripe"],
  "pageViews": 505,
  "demoClicksLaunchWeek": 82,
  "sharesLaunchWeek": 4,
  "makerName": "Karthikeyan PV",
  "makerHandle": "pvkarty",
  "makerProfileUrl": "https://peerlist.io/pvkarty",
  "makerWebsite": "https://pinvari.com",
  "makerSocialLinks": { "instagram": "https://instagram.com/pvkarty" },
  "makerSkills": ["Product Design", "Design Systems", "Product Management"],
  "makerExperienceYears": 7
}
```

Upvoter:

```json
{
  "type": "upvoter",
  "launchTitle": "Ext Watch",
  "launchUrl": "https://peerlist.io/pvkarty/project/ext-watch",
  "launchWeek": "2026-W42",
  "name": "StupLean Team",
  "handle": "stuplean",
  "profileUrl": "https://peerlist.io/stuplean",
  "headline": "StupLean turns Lean Startup principles into practical SaaS tools.",
  "verified": false,
  "upvotedAt": "2026-10-18T11:40:46.643Z"
}
```

Profile:

```json
{
  "type": "profile",
  "name": "Manu Arora",
  "handle": "manuarora",
  "profileUrl": "https://peerlist.io/manuarora",
  "headline": "Building my solo web studio agency @aceternity.com",
  "website": "https://manuarora.in",
  "socialLinks": {
    "twitter": "https://twitter.com/mannupaaji",
    "linkedin": "https://linkedin.com/in/manuarora28",
    "producthunt": "https://producthunt.com/@manuarora"
  },
  "githubUsername": "manuarora700",
  "skills": ["ReactJS", "NodeJS", "Next JS", "TailwindCSS", "PostgreSQL"],
  "experienceYears": 9,
  "followers": 620,
  "projectCount": 12
}
```

Job:

```json
{
  "type": "job",
  "title": "Senior Product Designer",
  "companyName": "Clera",
  "companyDomain": "getclera.com",
  "jobType": "Full-time",
  "workplace": "remote",
  "countries": ["Europe"],
  "roles": ["Product Designer"],
  "skills": ["Product Design", "SaaS", "Figma"],
  "experienceMinYears": 5,
  "postedAt": "2026-10-18T10:47:46.527Z",
  "applyUrl": "https://jobs.ashbyhq.com/Clera/e668bb34-8435-4a77-a3b2-e489e4f8e9bc/application",
  "jobUrl": "https://peerlist.io/company/getclera/careers/senior-product-designer/jobhok8l8nl8omopq3gqa96gkk76gq"
}
```

### Key Output Fields

| Field | Meaning |
|---|---|
| `type` | `launch`, `upvoter`, `comment`, `profile` or `job` |
| `website` | The product's own site (launch rows) or the person's site (profile and enriched upvoter rows) |
| `launchWeek` | ISO week of the launch, `2026-W42` |
| `rank` / `weeklyRank` | Overall rank and rank within the week |
| `upvotes` | Upvote count on Peerlist |
| `pageViews` | Views of the launch page |
| `demoClicksLaunchWeek` / `sharesLaunchWeek` | Clicks on the product link and shares, summed over the launch week; `clicksByDay` has each day |
| `demoClicksAfterLaunchWeek` / `sharesAfterLaunchWeek` | Peerlist's running totals after the launch week |
| `upvotedAt` / `upvoteWeight` | When the person upvoted, and how much their vote counts on Peerlist (1-3) |
| `socialLinks` | Lowercased keys: `twitter`, `linkedin`, `github`, `instagram`, `producthunt`, ... |
| `salaryMin` / `salaryMax` / `salaryCurrency` / `salaryUnit` | Numbers, ISO currency, and `year`, `month`, `week` or `hour` |
| `aggregated` | `true` for jobs Peerlist imports from company career pages (Greenhouse, Ashby, ...) |

### FAQ

**How many launches are there per week?**
A few hundred. The current week is still filling up; past weeks are final.

**Can I get every upvoter of a big launch?**
Yes, all of them in one call. Upvote times come for the most recent 150; older upvoters have `upvotedAt` empty.

**Are emails included?**
No. Peerlist does not show email addresses. Rows carry websites, social links and GitHub usernames instead.

**Why does the run use a proxy?**
Peerlist refuses requests from cloud servers. Apify datacenter proxy works and is used by default, at no extra charge to you.

**Do I need a Peerlist account or cookies?**
No.

**Are empty results charged?**
No. You pay only for rows delivered.

### Pricing

| Event | When | Price |
|---|---|---|
| Actor start | Once per run (per GB of memory, 256 MB default) | $0.005 |
| Launch | Each launch row, maker details included | $0.001 |
| Upvoter | Each upvoter row | $0.001 |
| Comment | Each comment or reply | $0.001 |
| Job | Each job row | $0.001 |
| Profile | Each profile row, or an upvoter row with `upvoterProfiles` on | $0.002 |

Example: the top 25 launches of week 42 with all their upvoters and comments came to 1,637 rows (25 launches, 1,383 upvoters, 229 comments): $1.64 with the start fee.

### Support

Found a bug or need a field? Open an issue on the actor's Issues tab and include the run link.

### Explore More Scrapers

Launch and startup data from the same author: Product Hunt Scraper, Startup Launch Scraper (TinyLaunch, MicroLaunch, BetaList, Uneed and more), and Startup Fast.

### 🤖 For AI Agents & LLM Apps

Call this actor from the Apify MCP server or the API with a small JSON input (see the examples above). Rows are flat JSON with stable field names and a `type` field, ready for tools, RAG pipelines and spreadsheets. `description` fields come as plain text, with the original HTML in `descriptionHtml`.

### ⚠️ Disclaimer

This actor reads public pages and public endpoints of Peerlist. It is not affiliated with or endorsed by Peerlist. You are responsible for using the data in line with Peerlist's terms and the privacy laws that apply to you, including the GDPR and CCPA. Profile data belongs to the people it describes; use it for legitimate purposes and respect opt-outs.

### SEO Keywords

Peerlist scraper, Peerlist API, Peerlist Launchpad scraper, Peerlist upvoters, Peerlist launches, Peerlist profiles, Peerlist jobs scraper, product launch scraper, Product Hunt alternative data, startup launch leads, indie hacker products, launch upvoters export, developer profiles scraper, designer profiles, tech jobs scraper, remote jobs data

# Actor input Schema

## `mode` (type: `string`):

Launches: product launches from Peerlist Launchpad, by week or by link. Profiles: people by handle or link. Jobs: the Peerlist job board, with filters.

## `launchUrls` (type: `array`):

Any mix of launch pages (`https://peerlist.io/pvkarty/project/ext-watch`), Launchpad weeks (`https://peerlist.io/launchpad/2026/week/42`) and maker profiles (`https://peerlist.io/manuarora` returns every product that maker launched). Leave empty to read recent weeks.

## `recentWeeks` (type: `integer`):

Used when no links or weeks are given. 1 reads the current week (still in progress), 2 adds last week, and so on. Each week has a few hundred launches.

## `launchpadWeeks` (type: `array`):

Weeks as `2026-W42`, `2026/42` or a Launchpad week link. Weeks run Monday to Sunday (ISO weeks).

## `maxLaunchesPerWeek` (type: `integer`):

Launches come in rank order, so 20 keeps the week's top 20. 0 reads the whole week.

## `minUpvotes` (type: `integer`):

Skip launches with fewer upvotes. 0 keeps all.

## `includeLaunchDetails` (type: `boolean`):

Read each launch page for the product's own website, full description, tech tags and the Idea / Execution / Design rating split. Off is faster but leaves those fields empty.

## `includeAnalytics` (type: `boolean`):

Page views, demo-link clicks and shares per day of the launch week.

## `includeMakerProfile` (type: `boolean`):

Add the maker's personal website, social links (X, LinkedIn, GitHub, ...), skills, years of experience and followers to each launch row. Included in the launch price.

## `includeUpvoters` (type: `boolean`):

One extra row per person who upvoted each launch: name, handle, headline, profile link, verified badge, upvote time and weight.

## `upvoterProfiles` (type: `boolean`):

Open each upvoter's profile and add their website, social links, skills and experience. Billed as a profile row instead of an upvoter row.

## `includeComments` (type: `boolean`):

One extra row per comment and reply on each launch, with the author, likes and time.

## `profiles` (type: `array`):

`https://peerlist.io/manuarora`, `@manuarora` or `manuarora`. Each returns name, headline, website, social links, GitHub, skills, experience, followers and launched projects.

## `jobUrls` (type: `array`):

Specific Peerlist job pages (`https://peerlist.io/company/notion/careers/.../job...`). When given, the filters below are not used.

## `jobRoles` (type: `array`):

Peerlist's role names, for example `Software Engineer`, `Product Designer`, `Backend Engineer`, `Full-Stack Engineer`, `AI Engineer`, `UI/UX Designer`, `Machine Learning Engineer`, `Frontend Engineer`.

## `jobSkills` (type: `array`):

For example `React`, `Python`, `Go`, `Figma`. A job matches when it lists any of them.

## `jobTypes` (type: `array`):

Leave empty for all.

## `jobCountries` (type: `array`):

Full country names: `United States`, `India`, `United Kingdom`, `Canada`. Leave empty for all.

## `jobWorkplace` (type: `array`):

Leave empty for all.

## `jobPostedWithinDays` (type: `integer`):

0 reads the whole board, back to the oldest job still listed.

## `maxItems` (type: `integer`):

Cap on all rows together (launches, upvoters, comments, profiles, jobs). Free-plan runs return up to 100.

## `proxy` (type: `object`):

Peerlist refuses requests from cloud servers, so runs always go through a proxy. Apify datacenter proxy works and is the default; switch to residential only if Peerlist starts refusing it.

## Actor input object example

```json
{
  "mode": "launches",
  "recentWeeks": 1,
  "maxLaunchesPerWeek": 20,
  "minUpvotes": 0,
  "includeLaunchDetails": true,
  "includeAnalytics": true,
  "includeMakerProfile": false,
  "includeUpvoters": false,
  "upvoterProfiles": false,
  "includeComments": false,
  "profiles": [
    "https://peerlist.io/manuarora"
  ],
  "jobPostedWithinDays": 0,
  "maxItems": 1000,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Rows told apart by `type`: `launch`, `upvoter`, `comment`, `profile` and `job`.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxLaunchesPerWeek": 20,
    "profiles": [
        "https://peerlist.io/manuarora"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/peerlist-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxLaunchesPerWeek": 20,
    "profiles": ["https://peerlist.io/manuarora"],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/peerlist-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxLaunchesPerWeek": 20,
  "profiles": [
    "https://peerlist.io/manuarora"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call memo23/peerlist-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/peerlist-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/AhqYlR06oHV3egAFT/builds/kkE3yrM0USMp8p5ef/openapi.json
