# Partiful Events Scraper (`zucchini_gopher_m2v/partiful-scraper`) Actor

Extract public event details, a host's public profile and published event list, or Partiful's discover/trending feed from partiful.com -- no account or login needed.

- **URL**: https://apify.com/zucchini\_gopher\_m2v/partiful-scraper.md
- **Developed by:** [Faisal Ahdan naufal](https://apify.com/zucchini_gopher_m2v) (community)
- **Categories:** Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.70 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Partiful Events Scraper

Extract public event details, a host's public profile and published
event list, or Partiful's discover/trending feed from partiful.com — no
account or login needed.

### Why use this actor

- One actor covers Partiful's whole public surface: a single event's
  full detail, a host/organizer's public profile (plus their published
  event list, when they've made one public), or the platform's
  discover/trending feed
- No account, login, or API key required — this actor reads the same
  server-rendered data (`__NEXT_DATA__`) that powers the partiful.com
  website itself for every logged-out visitor
- Recovers far more than a basic HTML scrape: full location/address,
  guest-count breakdowns, images, custom fields, display theme, and more
  — not just a title and a date
- Accepts a full URL, a path, or just the bare ID — paste whatever you
  copied from the address bar
- Automatic retries on temporary network hiccups
- Honest about limits: guest lists are gated behind a login wall
  upstream and are out of scope, stated plainly rather than faked (see
  Known limits)

### How it works

Pick a `mode`:

1. **`event`** — full public detail for one or more specific event URLs.
2. **`host`** — a host/organizer's public profile, plus their published
   event list (only present for hosts who've opted into showing one).
3. **`discover`** — Partiful's public discover/trending feed (NYC, LA,
   Bay Area), optionally filtered by region (no URL needed).

### Input

**Event detail:**

```json
{
  "mode": "event",
  "urls": ["https://partiful.com/e/S9m7mAA0avBXnFR6rgf0", "hfqCb3JYBBGZ7d90ojHb"]
}
```

**Host / organizer profile:**

```json
{
  "mode": "host",
  "url": "https://partiful.com/u/gKCLORBCJ02HNuasw3YI",
  "maxItems": 50
}
```

**Discover feed:**

```json
{ "mode": "discover" }
```

```json
{ "mode": "discover", "regions": ["NYC", "LA"], "maxItems": 20 }
```

| Field | Type | Description |
|---|---|---|
| `mode` | string | `"event"` (default), `"host"`, or `"discover"`. |
| `url` | string | `event`/`host` mode — a single partiful.com URL, path, or bare ID. |
| `urls` | array | `event`/`host` mode — multiple URLs/IDs in one run. |
| `regions` | array | `discover` mode — subset of `["NYC", "LA", "SF"]`. Leave empty for all. |
| `maxItems` | integer | `host` mode — max events from a host's public list. `discover` mode — max trending events returned. Default 100, max 10,000. |
| `maxConcurrency` | integer | `event`/`host` mode — how many URLs to fetch in parallel. Default 4. |
| `proxyConfiguration` | object | Apify Proxy settings. Residential is on by default (not required for this target — no WAF was found, see `CRAWLING_METHOD.md` — kept for production robustness). |

### Output

**`event` mode** — one record per event, full upstream shape (truncated
here for readability; real output captured 2026-08-30):

```json
{
  "_input": "https://partiful.com/e/hfqCb3JYBBGZ7d90ojHb",
  "_source": "S1-nextdata",
  "_scrapedAt": "2026-08-30T17:00:45Z",
  "event": {
    "title": "Comedy night",
    "startDate": "2026-05-17T04:00:00.000Z",
    "timezone": "America/Los_Angeles",
    "status": "PUBLISHED",
    "locationInfo": {
      "type": "structured",
      "mapsInfo": {
        "name": "The Ice House Comedy",
        "addressLines": ["24 N Mentor Ave", "Pasadena, CA 91106"]
      }
    },
    "maxCapacity": 80,
    "guestStatusCounts": { "GOING": 11, "INTERESTED": 9, "MAYBE": 2, "...": "..." },
    "goingGuestCount": 11
  },
  "guest": null,
  "hosts": [{ "name": "...", "id": "..." }],
  "passwordRequired": false
}
```

**`host` mode** — one `HOST_PROFILE` record, then one `HOST_EVENT`
record per published event (real output, truncated):

```json
{
  "_input": "gKCLORBCJ02HNuasw3YI",
  "_source": "S1-nextdata",
  "recordType": "HOST_PROFILE",
  "user": { "name": "OC Cuties", "id": "gKCLORBCJ02HNuasw3YI", "bio": {"...": "..."} }
}
```

```json
{
  "_input": "gKCLORBCJ02HNuasw3YI",
  "_source": "S1-nextdata",
  "recordType": "HOST_EVENT",
  "id": "0dVvDJw8076h04QVBVnl",
  "title": "Cuties Go AYCE",
  "startDate": "2025-04-09T00:30:00.000Z"
}
```

A `HOST_PROFILE` record carries `"_warning": "host_has_no_public_event_list"`
instead of any `HOST_EVENT` rows when that host hasn't opted into showing
a public event list — most personal accounts.

**`discover` mode** — one `DISCOVER_EVENT` record per trending event
(real output, truncated):

```json
{
  "_input": "discover:NYC,LA",
  "_source": "S1-nextdata",
  "recordType": "DISCOVER_EVENT",
  "region": "NYC",
  "regionTitle": "Trending in NYC",
  "id": "G5T1visd0LOmscq9n7pA",
  "title": "Guinness world record attempt: DUCK DUCK GOOSE",
  "locationInfo": { "mapsInfo": { "name": "Central Park", "approximateLocation": "New York, NY" } },
  "interestedGuestCount": 523,
  "goingGuestCount": 286
}
```

A record with `_error` instead of the fields above means that input
could not be processed (for example, `"_error": "not_found"` for an ID
that doesn't resolve to any event or host).

### Pricing

Pay-per-event: **$0.005 per result** (`apify-default-dataset-item` — every
record written to the dataset, whether an `event` row, `HOST_PROFILE`,
`HOST_EVENT`, or `DISCOVER_EVENT`), with volume discounts on paid Apify
plans: $0.0043 (Bronze) → $0.0035 (Silver) → $0.0027 (Gold) → $0.002
(Platinum) → $0.0015 (Diamond). See `CRAWLING_METHOD.md` for the
competitive analysis this price is based on: 7 direct Partiful-specific
Store listings were found (`heliostech/partiful-event-scraper` at $0.003
flat is the market leader by users; `hypebridge/partiful-events-scraper`
prices its closest feature-equivalent event/host-profile events at
$0.006→$0.003 tiered), plus one strong adjacent-platform comparator
(`posh-vip-scraper`, 28 users, at $0.003 flat). This actor's price sits
just above the $0.003 incumbent floor — justified by recovering
materially more fields per record (full address, guest-count breakdown,
images, custom fields) than the cheaper competitors capture — while its
Gold tier and below already beat every competitor's own best discount
price. Store category: Lead Generation, Social Media.

### Known limits

- **Guest lists are not available.** Partiful only renders the actual
  guest list client-side after a logged-in session — every event page's
  server-rendered payload omits it even when `showGuestList: true`. This
  is Partiful's own access-control choice, not a bug on our end, and is
  out of scope per this project's no-login policy.
- **`host` mode's published-event list is opt-in per host.** Most
  personal accounts have not enabled it; brand/organizer accounts more
  often have. A `null` list is flagged with `_warning`, not treated as
  an error.
- **`discover` mode covers 3 fixed regions** (NYC, LA, Bay Area) with a
  small curated list each — this is Partiful's own editorial feed, not
  a full paginated or searchable index of every public event on the
  platform.

See `CRAWLING_METHOD.md` for the full recon writeup, including what was
tried and deliberately not used.

# Actor input Schema

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

"event" fetches full public detail for specific Partiful event URL(s). "host" fetches a host/organizer's public profile plus their published event list (when they've made one public). "discover" fetches Partiful's public trending feed (no URL needed).

## `url` (type: `string`):

"event" or "host" mode: a single partiful.com URL, path, or bare ID (e.g. "https://partiful.com/e/S9m7mAA0avBXnFR6rgf0", "partiful.com/u/CxuTjQCQmpQfWu4Dur4yyOzAQ8b2", or just the ID).

## `urls` (type: `array`):

"event" or "host" mode: multiple partiful.com URLs/IDs to process in one run.

## `regions` (type: `array`):

"discover" mode only -- limit results to these trending regions. Leave empty for all regions currently published (NYC, LA, SF as of last verification -- see CRAWLING\_METHOD.md).

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

"host" mode: max events to list from a host's public event list. "discover" mode: max trending events to return across selected regions.

## `maxConcurrency` (type: `integer`):

"event"/"host" mode only -- how many URLs to fetch in parallel.

## `proxyConfiguration` (type: `object`):

Apify Proxy configuration. Residential is on by default. Not required for this target (no WAF was found -- see CRAWLING\_METHOD.md) but kept on for production robustness.

## Actor input object example

```json
{
  "mode": "event",
  "url": "https://partiful.com/e/S9m7mAA0avBXnFR6rgf0",
  "maxItems": 100,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

All scraped event / host / discover records produced by this run.

# 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 = {
    "mode": "event",
    "url": "https://partiful.com/e/S9m7mAA0avBXnFR6rgf0",
    "maxItems": 100,
    "maxConcurrency": 4,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("zucchini_gopher_m2v/partiful-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 = {
    "mode": "event",
    "url": "https://partiful.com/e/S9m7mAA0avBXnFR6rgf0",
    "maxItems": 100,
    "maxConcurrency": 4,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("zucchini_gopher_m2v/partiful-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 '{
  "mode": "event",
  "url": "https://partiful.com/e/S9m7mAA0avBXnFR6rgf0",
  "maxItems": 100,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call zucchini_gopher_m2v/partiful-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zucchini_gopher_m2v/partiful-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/wT5s76Ow1medjuD6P/builds/ekZmozg0VSEb1fvvc/openapi.json
