# Posh Events Scraper (`maximedupre/posh-events`) Actor

Collect public Posh.vip events by city, coordinates, event URL, or organizer. Get schedules, venues, ticket prices, and public organizer contacts when available for event and outreach research.

- **URL**: https://apify.com/maximedupre/posh-events.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Lead generation, Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.70 / 1,000 events

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

### 🎟️ Turn public Posh events into research data

For event researchers, local planners, and outreach teams, Posh Events Scraper collects public events from the Posh.vip event platform. Get event links, schedules, venues, ticket prices, and organizer details when Posh shows them. Use the saved data to compare events and find public organizer contacts without copying each page by hand.

- Compare published prices and fees with **[Posh Tickets](https://apify.com/maximedupre/posh-events/examples/posh-tickets)**.
- Collect schedules and organizer details for **[Posh VIP Events](https://apify.com/maximedupre/posh-events/examples/posh-vip-events)** research.
- Build a local event list with **[Posh Events Chicago](https://apify.com/maximedupre/posh-events/examples/posh-events-chicago)**.
- Find nearby event listings with **[Posh Events Near Me](https://apify.com/maximedupre/posh-events/examples/posh-events-near-me)**.
- Review venues and dates with **[Posh Events New York](https://apify.com/maximedupre/posh-events/examples/posh-events-new-york)**.

#### 📦 Posh event data in each row

Each row describes one public event. It includes its ID, page link, title, start and end times, and timezone. Other fields can include descriptions, ticket tiers and fees, venue details, attendance counts, performers, media, and the public organizer profile.

Optional fields depend on what Posh publishes. Contact emails, attendance counts, and coordinates are not guaranteed. When the same event appears more than once, the first eligible match is saved immediately. Later matches are ignored and do not add details to the saved row.

#### ▶️ Collect events by city, location, URL, or organizer

1. Choose **Find events by**: City, Coordinates, Event URLs, or Organizers.
2. Fill in that choice's options. Options for other source choices are ignored.
3. Add any event filters you need and set **Maximum events** for a smaller run.
4. Start the run, then open **Events** to view or download the saved data.

City and Coordinates discovery covers the current month. Use Organizers or Event URLs for dates beyond this month. Date filters narrow the selected source; they do not extend its date coverage.

#### ⚙️ Input

**Input fields**

`findBy` is required. Event filters apply to all four source choices. Leave optional filters empty to skip them, subject to the selected source's coverage.

| Field | Type | What it does |
| --- | --- | --- |
| `findBy` | string | Chooses `city`, `coordinates`, `eventUrls`, or `organizers`. Fill only the matching source options. |
| `city` | string | City to search, such as New York. City discovery covers the current month. |
| `location` | object | Place to search around for Coordinates discovery, which covers the current month. |
| `location.latitude` | number | Latitude in decimal degrees, from -90 to 90. Required within `location`. |
| `location.longitude` | number | Longitude in decimal degrees, from -180 to 180. Required within `location`. |
| `eventUrls` | object array | One or more public Posh event URLs, each selecting a known event. |
| `eventUrls[].url` | string | Public Posh event page URL. |
| `organizers` | string array | Posh organizer page URLs or identifiers used to find their events. |
| `keywords` | string array | Keeps events whose text matches at least one keyword. Leave empty to skip this filter. |
| `startDate` | string | Inclusive first event start date in `YYYY-MM-DD` form, using the event's local date. Leave empty for no lower date filter. |
| `endDate` | string | Inclusive last event start date in `YYYY-MM-DD` form, using the event's local date. Leave empty for no upper date filter. |
| `eventPeriod` | string | Keeps `past`, `upcoming`, or `current` events. City supports Upcoming and Happening now, not Past. Use Organizers or Event URLs for past events. Leave empty for all periods available from the selected source. |
| `ticketPrice` | string | Keeps events with a `free` or `paid` ticket. An event with both can match either choice. Leave empty to include both. |
| `maxTicketPrice` | number | Keeps events with at least one qualifying ticket at or below this base price in the event's currency. Fees are excluded. Minimum is 0; leave empty for no price limit. |
| `attendanceMode` | string | Keeps `inPerson` or `online` events. Leave empty to include both. |
| `discoveryOrder` | string | For City, Coordinates, and Organizers, uses `trending`, `newest`, `popularity`, or `chronological` order where Posh supports it. Leave empty for source order. |
| `maxItems` | integer | Stops after this many matching events are saved. Minimum is 1. Leave empty to return all available matching events until the selected source is exhausted. |

Leaving `maxItems` empty does not extend the source's coverage. City and Coordinates discovery still covers the current month; Organizers and Event URLs can include dates beyond this month.

**Example input**

This is the public input from a successful hosted default-input run:

```json
{
  "findBy": "city",
  "city": "New York",
  "maxItems": 10
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `events` | string | Links to the saved events for viewing and downloading. |

**Event row**

All four source choices use the same event shape. `id`, `url`, `title`, `startsAt`, `endsAt`, and `timezone` are required. The other fields appear when public data is available. Dotted paths below describe nested fields; `[]` means an array entry.

| Field | Type | What it does |
| --- | --- | --- |
| `id` | string | Posh event ID for matching events. |
| `url` | string | Public Posh event page link. |
| `title` | string | Published event title. |
| `startsAt` | string | Published start time with its UTC offset. |
| `endsAt` | string | Published end time with its UTC offset. |
| `timezone` | string | Published event timezone. |
| `summary` | string | Short event summary. |
| `description` | string | Full published event description. |
| `attendanceMode` | string | Published online or in-person mode. |
| `status` | string | Published event status. |
| `passwordProtected` | boolean | Whether Posh says access needs a password. |
| `admissionRestrictions` | string array | Published admission rules. |
| `terms` | string | Published event terms. |
| `venue` | object | Published venue and location details. |
| `venue.name` | string | Venue name. |
| `venue.address` | string | Street address. |
| `venue.city` | string | City name. |
| `venue.region` | string | State or region. |
| `venue.country` | string | Country. |
| `venue.postalCode` | string | Postal code. |
| `venue.latitude` | number | Latitude in decimal degrees. |
| `venue.longitude` | number | Longitude in decimal degrees. |
| `tickets` | object array | Published ticket tiers. An empty array means no tiers were available. |
| `tickets[].id` | string | Source ticket ID. |
| `tickets[].name` | string | Ticket tier name. |
| `tickets[].description` | string | Ticket tier description. |
| `tickets[].price` | number | Base price in the listed currency. |
| `tickets[].priceWithFees` | number | Published price including fees. |
| `tickets[].currency` | string | Price currency code. |
| `tickets[].bookingFee` | number | Published booking fee. |
| `tickets[].fees` | object array | Published fee rules. |
| `tickets[].fees[].name` | string | Fee name. |
| `tickets[].fees[].amount` | number | Fixed fee in the listed currency. |
| `tickets[].fees[].rate` | number | Published fee rate. |
| `tickets[].fees[].basis` | string | What the fee applies to. |
| `tickets[].quantityAvailable` | integer | Published number of tickets left. |
| `tickets[].availability` | string | Published availability. |
| `tickets[].closed` | boolean | Whether the source marks the tier as closed. |
| `tickets[].disabled` | boolean | Whether the source disables the tier. |
| `tickets[].soldOut` | boolean | Whether the source marks the tier as sold out. |
| `tickets[].minimumPerOrder` | integer | Smallest purchase quantity. |
| `tickets[].maximumPerOrder` | integer | Largest purchase quantity. |
| `tickets[].admissionStartsAt` | string | Start of the published admission window. |
| `tickets[].admissionEndsAt` | string | End of the published admission window. |
| `tickets[].saleStartsAt` | string | Start of ticket sales. |
| `tickets[].saleEndsAt` | string | End of ticket sales. |
| `tickets[].approvalRequired` | boolean | Whether purchase needs approval. |
| `tickets[].transferable` | boolean | Whether the ticket can be transferred. |
| `tickets[].saleChannels` | string array | Published ways to buy this tier. |
| `priceRange` | object | Published event prices not listed in ticket tiers. |
| `priceRange.minimumWithFees` | number | Lowest ticket price with fees shown on the event page. |
| `attendance` | object | Public attendance and guestlist facts. |
| `attendance.rsvpCount` | integer | Published RSVP count. |
| `attendance.attendeeCount` | integer | Published attendance count. |
| `attendance.ticketsSold` | integer | Published ticket-sales count. |
| `attendance.guestlistAvailable` | boolean | Whether the source offers a guestlist. |
| `performers` | object array | Published performer lineup. |
| `performers[].name` | string | Performer name. |
| `performers[].role` | string | Performer role. |
| `performers[].imageUrl` | string | Public performer image link. |
| `performers[].profileUrl` | string | Public performer profile link. |
| `performers[].startsAt` | string | Published performance start time. |
| `performers[].endsAt` | string | Published performance end time. |
| `media` | object | Public event images, videos, and music. |
| `media.flyerUrl` | string | Flyer image link. |
| `media.gallery` | string array | Gallery image links. |
| `media.videos` | string array | Promotional video links. |
| `media.music` | object array | Music linked to the event. |
| `media.music[].title` | string | Track or playlist title. |
| `media.music[].artist` | string | Artist name. |
| `media.music[].url` | string | Track or playlist link. |
| `organizer` | object | Public organizer profile. |
| `organizer.id` | string | Posh organizer ID for joining events. |
| `organizer.name` | string | Organizer name. |
| `organizer.url` | string | Profile link. |
| `organizer.biography` | string | Published biography. |
| `organizer.avatarUrl` | string | Avatar image link. |
| `organizer.verified` | boolean | Whether Posh marks the organizer as verified. |
| `organizer.classification` | string | Published organizer type. |
| `organizer.country` | string | Published country. |
| `organizer.currency` | string | Published currency. |
| `organizer.createdAt` | string | Profile creation date from Posh. |
| `organizer.email` | string | Public contact email. |
| `organizer.website` | string | Published website. |
| `organizer.links` | object array | Social profiles and other published links. |
| `organizer.links[].label` | string | Link label or platform name. |
| `organizer.links[].url` | string | Published link address. |
| `organizer.lifetimeAttendance` | integer | Published lifetime attendance count. |
| `organizer.eventCount` | integer | Published event count. |
| `organizer.paymentAccounts` | object array | Public payment-platform account IDs. |
| `organizer.paymentAccounts[].platform` | string | Payment platform name. |
| `organizer.paymentAccounts[].accountId` | string | Public account ID. |
| `ticketSections` | object array | Published groups of ticket tiers. |
| `ticketSections[].name` | string | Section name. |
| `ticketSections[].ticketIds` | string array | Source ticket IDs in the section. |
| `bottleService` | object array | Published bottle-service offers. |
| `bottleService[].name` | string | Offer name. |
| `bottleService[].description` | string | Offer description. |
| `bottleService[].price` | number | Published price. |
| `bottleService[].currency` | string | Price currency. |
| `bottleService[].capacity` | integer | Number of guests covered. |
| `paymentPlans` | object array | Published payment plans. |
| `paymentPlans[].description` | string | Published payment terms. |
| `paymentPlans[].currency` | string | Currency of payment amounts. |
| `series` | object | Published recurring-series details. |
| `series.id` | string | Source series ID for joining related events. |
| `series.name` | string | Series name. |
| `series.occurrence` | string | Published occurrence label or context. |

This genuine row from a successful current-beta run is shortened. The string `"..."` marks omitted data, including more ticket tiers. All other shown values come from the saved event.

```json
{
  "id": "6ac03f0156a84805977bd7e0",
  "url": "https://posh.vip/e/salsa-on-steinway-colombian-dance-party-in-astoria-queens-84",
  "title": "Salsa on Steinway - Colombian Dance Party in Astoria Queens",
  "startsAt": "2026-11-01T22:00:00.000Z",
  "endsAt": "2026-11-02T09:00:00.000Z",
  "timezone": "America/New_York",
  "summary": "Ritmos 60, a historic Colombian hotspot in Astoria, delivers authentic handcrafted Colombian cocktails & the best nightlife experience.",
  "description": "...",
  "attendanceMode": "inPerson",
  "status": "live",
  "passwordProtected": false,
  "terms": "...",
  "venue": {
    "name": "Ritmos 60",
    "address": "32-23 Steinway St, Astoria, NY 11103, USA",
    "city": "Astoria",
    "region": "NY",
    "country": "US",
    "postalCode": "11103",
    "latitude": 40.7584175,
    "longitude": -73.9192693
  },
  "tickets": [
    {
      "id": "6ac03f0156a84805977bd7e2",
      "name": "Free RSVP until 11:30PM",
      "description": "Valid for entry before 11:30 PM at doorman discretion. Fashionable Attire is mandatory.",
      "price": 0,
      "priceWithFees": 0,
      "currency": "USD",
      "bookingFee": 0,
      "fees": [
        {
          "name": "Venue Fee",
          "rate": 0.08,
          "basis": "subtotal"
        }
      ],
      "quantityAvailable": 2,
      "availability": "available",
      "closed": false,
      "disabled": false,
      "soldOut": false,
      "minimumPerOrder": 1,
      "maximumPerOrder": 2,
      "approvalRequired": false,
      "transferable": true,
      "saleChannels": [
        "event_page",
        "tap_to_pay"
      ]
    },
    "..."
  ],
  "priceRange": {
    "minimumWithFees": 0
  },
  "attendance": {
    "guestlistAvailable": true
  },
  "performers": [],
  "media": {
    "flyerUrl": "https://images.posh.vip/originals/6ac03efa993d4a22eb47bcfe",
    "gallery": [],
    "videos": []
  },
  "organizer": {
    "id": "648a1a6607728e0047047247",
    "name": "PERREO PARRTY",
    "url": "https://posh.vip/g/perreoparrty",
    "biography": "Bienvenidos al perreo de sus vidas 🐶⚡️ ven y disfruta con la mejor energia 💃🕺🏻 🔥\nDM para más info",
    "avatarUrl": "https://images.posh.vip/alts/694ea9067d8b534d2b271560/600x600.webp",
    "verified": true,
    "classification": "Nightlife Hospitality Group",
    "country": "US",
    "currency": "USD",
    "email": "info@crustnation.com",
    "website": "https://www.perreoparrty.com/",
    "links": [
      {
        "label": "instagram",
        "url": "https://www.instagram.com/perreoparrty"
      }
    ],
    "paymentAccounts": [
      {
        "platform": "Stripe",
        "accountId": "acct_1NIzjfDAUkCPMv1N"
      }
    ]
  },
  "ticketSections": [],
  "bottleService": "...",
  "paymentPlans": []
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. One public event saved to the dataset is the charged outcome, with its available ticket and organizer details. See the Store pricing panel for the current rate. Empty searches and skipped duplicates do not create an event charge.

#### 🔌 Integrations

Use the Apify API to start runs and read the saved dataset. Download the data with Apify's dataset exports, or use Apify schedules and webhooks in your own workflow.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Why does a date filter not find events beyond this month?

City and Coordinates discovery covers the current month. Date filters only narrow that set. Use Organizers or Event URLs when you need dates beyond this month.

##### Can I collect past events?

Use Organizers or Event URLs and choose Past. City discovery does not support Past. Optional date filters use the event's local start date and include both boundary dates.

##### Does the price filter include ticket fees?

No. `maxTicketPrice` uses the base price in the event's listed currency. Output can include `priceWithFees` and fee rules when Posh publishes them. An event with both free and paid tickets can match either ticket-price choice.

##### Will every event include an organizer email or attendance count?

No. These fields are returned only when Posh makes them public. The Actor does not promise contact details, attendance figures, or venue coordinates for every event.

##### How are duplicate events handled?

The first eligible occurrence is saved immediately. If another submitted URL, organizer, or other value finds the same event again, that later match is ignored. It does not update the saved row.

##### What happens when I leave Maximum events empty?

The Actor returns all available matching events until the selected source is exhausted. The selected source and filters still set the scope of the run.

##### Do I need a Posh login?

No. This Actor collects public Posh.vip event data without a source login. Private or protected content is outside its scope.

##### Can it buy tickets or manage events?

No. It reads public event data. It does not buy tickets, make reservations, or manage events.

### 📝 Changelog

**v0.0** (03-10-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~posh-events/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Partiful Events Scraper](https://apify.com/maximedupre/partiful) collects public Partiful events, host profiles, and RSVP signals for social-event research.
- [Meetup Events Scraper](https://apify.com/maximedupre/meetup) collects public Meetup events and groups for local community research.
- [Fever Events Scraper](https://apify.com/maximedupre/fever-events) collects public experiences, venues, and ticket prices for city activity lists.
- [10times Events Scraper](https://apify.com/maximedupre/10times-events-scraper) collects trade shows and conferences for business-event research.
- [LinkedIn Events Scraper](https://apify.com/maximedupre/linkedin-events) finds public professional events and organizer details for webinar research.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `findBy` (type: `string`):

Choose how to find Posh events. Fill in the matching options below. Other source options are ignored.

## `city` (type: `string`):

Enter the city to search, such as New York. City discovery covers the current month. Use Organizers or Event URLs for dates beyond this month.

## `location` (type: `object`):

Enter the latitude and longitude of the place to search around. Coordinates discovery covers the current month. Use Organizers or Event URLs for dates beyond this month.

## `eventUrls` (type: `array`):

Add one or more public Posh event URLs. Each URL selects a known event.

## `organizers` (type: `array`):

Add one or more Posh organizer page URLs or organizer identifiers to find their events.

## `keywords` (type: `array`):

Keep events whose text matches at least one keyword. Applies to all ways of finding events. Leave empty to skip this filter.

## `startDate` (type: `string`):

Keep events starting on or after this date, including the date itself. Uses the event’s local date. Leave empty for no lower date filter within the selected source. City and Coordinates discovery stays within the current month.

## `endDate` (type: `string`):

Keep events starting on or before this date, including the date itself. Uses the event’s local date. Leave empty for no upper date filter within the selected source. City and Coordinates discovery stays within the current month.

## `eventPeriod` (type: `string`):

Keep past events, upcoming events, or events happening now. For City, choose Upcoming or Happening now; Past is not supported. Use Organizers or Event URLs for past events. Leave empty to include all periods available from the selected source.

## `ticketPrice` (type: `string`):

Keep events with a free ticket or a paid ticket. An event with both can match either choice. Leave empty to include both.

## `maxTicketPrice` (type: `number`):

Keep events with at least one qualifying ticket at or below this base price in the event’s listed currency. Fees are not included. Leave empty for no price limit.

## `attendanceMode` (type: `string`):

Keep in-person or online events. Leave empty to include both.

## `discoveryOrder` (type: `string`):

For City, Coordinates, and Organizers, choose the order used to find events where Posh supports it. Leave empty to use the source order.

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

Stop after saving this many matching events. Leave empty to get all available matching events from the selected source until it is exhausted. City and Coordinates discovery covers the current month; Organizers and Event URLs can include dates beyond this month.

## Actor input object example

```json
{
  "findBy": "city",
  "city": "New York",
  "maxItems": 10
}
```

# Actor output Schema

## `events` (type: `string`):

View and download the saved public events.

# 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 = {
    "findBy": "city",
    "city": "New York",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/posh-events").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 = {
    "findBy": "city",
    "city": "New York",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/posh-events").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 '{
  "findBy": "city",
  "city": "New York",
  "maxItems": 10
}' |
apify call maximedupre/posh-events --silent --output-dataset

```

## MCP server setup

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

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/O4TtUpb3JEe8BBDvT/builds/d9XIWmive2snTMHqU/openapi.json
