PGM Internal Reference

Content Automation Pipeline

Two-stage system: Stage 1 scrapes and collects events into Airtable. Stage 2 formats approved events into PGM-voice articles and pushes them to the site. Total weekly time investment: ~15 minutes.

[RSS Feeds + Browse.ai] → [Make.com] → [Airtable "Event Inbox"] → [Monday review: Approve 5–6] → [Make.com trigger] → [PGM Editorial AI at /editorial] → [Publish]
Stage 1 — Event Finding

Create a new Airtable base called PGM Event Pipeline. Add one table: Event Inbox.

Field NameField TypeNotes
Event NameSingle line textRequired
DateDateInclude time. Format: YYYY-MM-DD HH:mm
End DateDateOptional — defaults to start + 3h on intake
VenueSingle line text
NeighborhoodSingle line textLittle Havana, Wynwood, Brickell, etc.
CategorySingle selectLive / Love / Play
DescriptionLong textRaw notes from scrape or press release
Ticket URLURL
Image URLURLOptional hero image from venue site
Source URLURLWhere you found it — for reference only
StatusSingle selectReview (default) / Approved / Rejected
FeaturedCheckboxCheck to feature on homepage

In Make.com, add an RSS module for each feed. Set it to check weekly (Monday 6 AM). Route output through an AI text-extraction step, then map fields to Airtable.

SourceRSS / URLCategory
Eventbrite Miamihttps://www.eventbrite.com/d/fl--miami/events/?format=rssMixed
New World Symphonyhttps://www.nws.edu/events/rssLove
Adrienne Arsht Centerhttps://www.arshtcenter.org/events/rssLove
Pérez Art Museum (PAMM)https://www.pamm.org/events/rssLove
Pinecrest Gardenshttps://pinecrestgardens.org/events/rssPlay
Kaseya Centerhttps://www.kaseyacenter.com/events/rssPlay
Hard Rock Live Hollywoodhttps://www.hardrocklive.com/events/rssPlay
Gulfstream Parkhttps://www.gulfstreampark.com/events/rssPlay
Miami Design Districthttps://www.miamidesigndistrict.net/events/rssLove
Wynwood Wallshttps://www.thewynwoodwalls.com/events/rssLove
r/Miami (Reddit)https://www.reddit.com/r/miami/search.rss?q=event&sort=newMixed

Note: Some venues don't publish RSS. Use Browse.ai for those (see Step 3).

Use Browse.ai (browse.ai) to monitor venue event pages that don't have RSS feeds. Set each robot to run weekly and export to Airtable via webhook or CSV.

VenueURL to MonitorFields to Extract
Kaseya Centerhttps://www.kaseyacenter.com/eventsEvent name, date, ticket URL
Hard Rock Livehttps://www.hardrocklive.com/eventsEvent name, date, ticket URL
Hoy Como Ayerhttps://www.hoycomoayer.us/eventsEvent name, date, description
Gulfstream Parkhttps://www.gulfstreampark.com/eventsEvent name, date, category
Pinecrest Gardenshttps://pinecrestgardens.org/eventsEvent name, date, description
Lincoln Road BIDhttps://www.lincolnroad.org/eventsEvent name, date, venue
Coral Gableshttps://www.coralgables.com/eventsEvent name, date, location
Moss Centerhttps://www.mosscenter.org/eventsEvent name, date, ticket URL

Browse.ai AI extraction prompt: "Extract the event name, date and time, venue, neighborhood, and ticket URL from this page. Return as structured JSON."

Build one Make.com scenario that runs every Monday at 6 AM. It collects from all RSS feeds and Browse.ai webhooks, deduplicates by event name + date, and creates Airtable rows with Status = "Review".

1
Trigger: Schedule module — every Monday 6:00 AM
2
RSS Iterator: Loop through each RSS feed URL. Parse items. Extract title, pubDate, link, description.
3
AI Text Extraction: OpenAI module. Prompt: "Extract event name, date/time, venue, neighborhood, and ticket URL from this text. Return JSON." Feed it the RSS item description.
4
Browse.ai Webhook: Separate webhook trigger receives Browse.ai exports. Same AI extraction step.
5
Deduplication: Airtable Search module — check if a record with the same Event Name + Date already exists. Skip if found.
6
Create Airtable Row: Airtable Create Record module. Map AI-extracted fields to Airtable columns. Set Status = "Review".
7
Slack/Email Alert: Optional: send yourself a summary — "X new events added to your inbox for review."
Stage 2 — Formatting & Publishing
  1. 1Open Airtable → Event Inbox. You'll see 30–60 new rows with Status = "Review".
  2. 2Skim the list. Change Status to "Approved" for your best 5–6 events.
  3. 3Change the rest to "Rejected" (or just leave them — Make.com ignores non-Approved rows).
  4. 4Done. The automation handles everything from here.

A second Make.com scenario watches for Airtable rows where Status changes to "Approved" and pushes them directly to the PGM events database via the webhook endpoint.

1
Trigger: Airtable Watch Records module — filter: Status = "Approved"
2
Build payload: Map Airtable fields to the PGM webhook JSON shape (see below).
3
HTTP POST: Send to https://premierguidemiami.com/api/webhooks/event-intake with X-PGM-Signature header.
4
Confirm: Check response. If insertedIds array is non-empty, event is live on the site.
Webhook endpoint
POST https://premierguidemiami.com/api/webhooks/event-intake
Header: X-PGM-Signature: sha256=<hmac_sha256_of_body_using_WEBHOOK_SECRET>
Header: Content-Type: application/json
Payload shape (single event)
{
  "events": [
    {
      "Event Name": "Hoy Como Ayer — Salsa & Sip, Season 2",
      "Date": "2026-10-04 21:00",
      "End Date": "2026-10-05 02:00",
      "Venue": "Hoy Como Ayer",
      "Neighborhood": "Little Havana",
      "Category": "Play",
      "Description": "Season 2 opener. Live salsa band, open bar packages.",
      "Ticket URL": "https://www.hoycomoayer.us",
      "Featured": false
    }
  ]
}
Test with curl
curl -X POST https://premierguidemiami.com/api/webhooks/event-intake \
  -H "Content-Type: application/json" \
  -H "X-PGM-Signature: sha256=<hmac_of_body_using_WEBHOOK_SECRET>" \
  -d '{
  "events": [
    {
      "Event Name": "Hoy Como Ayer — Salsa & Sip, Season 2",
      "Date": "2026-10-04 21:00",
      "End Date": "2026-10-05 02:00",
      "Venue": "Hoy Como Ayer",
      "Neighborhood": "Little Havana",
      "Category": "Play",
      "Description": "Season 2 opener. Live salsa band, open bar packages.",
      "Ticket URL": "https://www.hoycomoayer.us",
      "Featured": false
    }
  ]
}'

For weekend roundup articles (not just calendar events), use the PGM Editorial AI at /editorial. Paste your approved Airtable rows and get back a fully formatted guide draft + Instagram caption.

Alternatively, use the master prompt below in ChatGPT Team or Claude Projects with your style guide uploaded as a reference document.

Master prompt — copy into ChatGPT / Claude Projects
You are the Lead Editor for Premier Guide Miami. Your voice is sharp, confident, sophisticated, and sounds like a highly knowledgeable local friend giving unsponsored advice.

I will give you a list of raw event details. Format them into our standard weekend guide layout using the following strict rules:

1. STRUCTURE: Organize chronologically by day.
2. HEADINGS: Format event titles using markdown bold, followed by a line break, then small italicized metadata (Neighborhood | Venue | Time).
3. COPYWRITING: Write a snappy, engaging 2-3 sentence description for each event. Do not use generic filler words like "nestled," "boasts," "testament," or "vibrant." Keep it grounded, punchy, and exclusive.
4. PILLAR: Tag each event with its pillar — Live Miami™ (lifestyle, wellness, real estate), Love Miami™ (arts, dining, culture), or Play Miami™ (nightlife, music, sports, festivals).
5. METRICS & LINKS: If any internal article or price details are provided, format them as clean hyperlinks or callout text.
6. INSTAGRAM BONUS: At the very end, generate a minimalist, one-slide text layout for a carousel post summarizing the days.

Here are the raw event details for this week:
[PASTE YOUR APPROVED AIRTABLE ROWS HERE]
Internal document — not indexed. Tools referenced: Airtable (airtable.com), Make.com (make.com), Browse.ai (browse.ai), OpenAI (platform.openai.com).
PGM Editorial AI: /editorial · Webhook endpoint: /api/webhooks/event-intake