Patch.com Local News, Events & Classifieds Finder
Search Patch.com's hyperlocal US news by keyword, town, category, author, or tag, and browse its local events calendar or classifieds board, with date-range and distance filters.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to fetch from Patch.com. |
startUrls | array | optional | mode=byUrl only. Paste Patch article, event, classified, town, category/topic, state or search URLs. Article/event/classified URLs are scraped directly; town/topic/state/search URLs are converted into the equivalent scoped query. |
searchQuery | string | optional | Free-text keyword to search for (mode=search; also applies to mode=events/classifieds and to scope URLs). Leave empty to browse the newest articles matching the other filters. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to fetch from Patch.com. |
startUrls | array | optional | mode=byUrl only. Paste Patch article, event, classified, town, category/topic, state or search URLs. Article/event/classified URLs are scraped directly; town/topic/state/search URLs are converted into the equivalent scoped query. |
searchQuery | string | optional | Free-text keyword to search for (mode=search; also applies to mode=events/classifieds and to scope URLs). Leave empty to browse the newest articles matching the other filters. |
searchMatch | string | optional | How multi-word searches match. "All words" requires every word anywhere in the headline/summary/topic (more results). "Exact phrase" requires the words to appear together (the old behavior). |
authorName | string | optional | Exact byline/reporter/poster name (required for mode=byAuthor; on any other mode it is an extra server-side filter). Copy it from this actor's `author` output field, e.g. "Eric Heyl". |
tagName | string | optional | Exact editorial tag (required for mode=byTag; on article modes it is an extra filter). Copy it from this actor's `tags` field, e.g. "Back To School". Only a minority of articles carry tags. |
regionSlug | string | optional | US state/edition to scope results to (required for mode=byTown; optional filter on every other mode). "Across America" is Patch's national edition (code US); "US Territories" is a valid Patch region with no current articles. |
townSlug | string | optional | Patch town/city URL slug (required for mode=byTown; requires regionSlug too). Find it in a Patch URL, e.g. patch.com/california/santamonica -> "santamonica". Example: "santamonica" (with regionSlug=california). |
category | string | optional | News category/topic to filter by (required for mode=byCategory; optional filter on mode=search/byTown/byAuthor/byTag). Not applicable to mode=events/classifieds -- use `classifiedCategory` for mode=classifieds instead. |
classifiedCategory | string | optional | Classifieds category to filter by (mode=classifieds only; a completely separate value set from `category`, which is news-only). Leave as "(any category)" to browse every classified category. |
sortBy | string | optional | Order of results. "Nearest first" requires both `nearLat`/`nearLng` AND mode=search/byTown/byCategory/byAuthor/byTag (news); otherwise it falls back to Relevance. "Soonest event first" requires mode=events; on any other mode it also falls back to Relevance. |
publishedAfter | string | optional | Only include articles/events/classifieds posted to Patch on or after this date (i.e. listing date, not an event's own occurrence date -- see `eventDateAfter` for that). Format: YYYY-MM-DD. Combine with `publishedBefore` for a date range. |
publishedBefore | string | optional | Only include articles/events/classifieds posted to Patch on or before this date. Format: YYYY-MM-DD. Combine with `publishedAfter` for a date range. |
eventDateAfter | string | optional | mode=events only. Only include events occurring on or after this date (the event's own date, not when it was posted to Patch -- see `publishedAfter` for that). Format: YYYY-MM-DD. Combine with `eventDateBefore` for a date range, e.g. "what's happening this weekend". |
eventDateBefore | string | optional | mode=events only. Only include events occurring on or before this date. Format: YYYY-MM-DD. Combine with `eventDateAfter` for a date range. |
nearLat | number | optional | Latitude of a point to search near (combine with `nearLng` and `radiusMiles`). News modes only (search/byTown/byCategory/byAuthor/byTag) -- not available for mode=events/classifieds, whose Patch indexes don't expose a filterable location field. Both `nearLat` and `nearLng` must be set together; otherwise this filter is ignored. |
nearLng | number | optional | Longitude of a point to search near (combine with `nearLat` and `radiusMiles`). News modes only -- see `nearLat` description. Both `nearLat` and `nearLng` must be set together; otherwise this filter is ignored. |
radiusMiles | integer | optional | Search radius around `nearLat`/`nearLng`, in miles. News modes only -- see `nearLat` description. Ignored unless both `nearLat` and `nearLng` are set. |
includeBodyText | boolean | optional | Add bodyHtml (the original HTML), bodyText (readable plain text) and bodyLength to each record. Article/event/classified bodies come from Patch's own search payload, so this costs no extra request. |
includeDetails | boolean | optional | Fetch each record's Patch page and add gallery images/captions/credits, author avatar and points, comment/reply counts, breaking/sponsored flags, town grade/weekly views/ZIPs/timezone/county/metro, event venue/type/website, and classified contact state. One extra request per record; failed pages never discard the base record. |
maxDetails | integer | optional | How many records to enrich when `includeDetails` is on. 0 means every emitted record (up to `maxItems`). Ignored when detail enrichment is off. |
monitorMode | boolean | optional | Emit only records whose Patch ID has not been seen by an earlier run with the same monitor key. State is stored in the actor's key-value store. |
monitorKey | string | optional | Optional namespace for monitor state. Give different saved tasks different keys to keep their seen-ID lists separate. Derived automatically from the mode and filters when empty. |
maxItems | integer | optional | Maximum number of articles, events or classifieds to return (1-1000). Requests above 250 are automatically split into date partitions to bypass Patch's 250-hit search-key window. |
Download the published input schema
View complete JSON
{
"description": "Scrape hyperlocal US news, events and classifieds from Patch.com by keyword, town, category, author, tag or URL, with optional full body text, detail-page enrichment and new-record monitoring.",
"properties": {
"authorName": {
"default": "",
"description": "Exact byline/reporter/poster name (required for mode=byAuthor; on any other mode it is an extra server-side filter). Copy it from this actor's `author` output field, e.g. \"Eric Heyl\".",
"editor": "textfield",
"prefill": "",
"title": "Author name",
"type": "string"
},
"category": {
"default": "",
"description": "News category/topic to filter by (required for mode=byCategory; optional filter on mode=search/byTown/byAuthor/byTag). Not applicable to mode=events/classifieds -- use `classifiedCategory` for mode=classifieds instead.",
"editor": "select",
"enum": [
"",
"around-town",
"arts-entertainment",
"bulletinboard",
"business",
"going-green",
"holidays",
"kids-family",
"lifestyle",
"obituaries",
"personal-finance",
"pets",
"police-fire",
"politics",
"real-estate",
"restaurants-bars",
"schools",
"small-business-voices",
"sports",
"traffic-transit",
"travel",
"weather"
],
"enumTitles": [
"(any category)",
"Community Corner",
"Arts & Entertainment",
"Neighbor News",
"Business",
"Home & Garden",
"Seasonal & Holidays",
"Kids & Family",
"Health & Fitness",
"Obituaries",
"Personal Finance",
"Pets",
"Crime & Safety",
"Politics & Government",
"Real Estate",
"Restaurants & Bars",
"Schools",
"Local Voices",
"Sports",
"Traffic & Transit",
"Travel",
"Weather"
],
"prefill": "",
"title": "Category",
"type": "string"
},
"classifiedCategory": {
"default": "",
"description": "Classifieds category to filter by (mode=classifieds only; a completely separate value set from `category`, which is news-only). Leave as \"(any category)\" to browse every classified category.",
"editor": "select",
"enum": [
"",
"announcements",
"for-sale",
"free-stuff",
"gigs-services",
"housing",
"lost-found",
"news-tip",
"opinion",
"other",
"question",
"recommendation"
],
"enumTitles": [
"(any category)",
"Announcements",
"For Sale",
"Free Stuff",
"Gigs & Services",
"Housing",
"Lost & Found",
"News Tip",
"Opinion",
"Other",
"Question",
"Recommendation"
],
"prefill": "",
"title": "Classified category",
"type": "string"
},
"eventDateAfter": {
"description": "mode=events only. Only include events occurring on or after this date (the event's own date, not when it was posted to Patch -- see `publishedAfter` for that). Format: YYYY-MM-DD. Combine with `eventDateBefore` for a date range, e.g. \"what's happening this weekend\".",
"editor": "textfield",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"title": "Event date after (YYYY-MM-DD)",
"type": "string"
},
"eventDateBefore": {
"description": "mode=events only. Only include events occurring on or before this date. Format: YYYY-MM-DD. Combine with `eventDateAfter` for a date range.",
"editor": "textfield",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"title": "Event date before (YYYY-MM-DD)",
"type": "string"
},
"includeBodyText": {
"default": true,
"description": "Add bodyHtml (the original HTML), bodyText (readable plain text) and bodyLength to each record. Article/event/classified bodies come from Patch's own search payload, so this costs no extra request.",
"prefill": false,
"title": "Include full body text",
"type": "boolean"
},
"includeDetails": {
"default": false,
"description": "Fetch each record's Patch page and add gallery images/captions/credits, author avatar and points, comment/reply counts, breaking/sponsored flags, town grade/weekly views/ZIPs/timezone/county/metro, event venue/type/website, and classified contact state. One extra request per record; failed pages never discard the base record.",
"prefill": false,
"title": "Enrich from detail pages",
"type": "boolean"
},
"maxDetails": {
"default": 100,
"description": "How many records to enrich when `includeDetails` is on. 0 means every emitted record (up to `maxItems`). Ignored when detail enrichment is off.",
"maximum": 1000,
"minimum": 0,
"prefill": 0,
"title": "Max detail pages",
"type": "integer"
},
"maxItems": {
"default": 25,
"description": "Maximum number of articles, events or classifieds to return (1-1000). Requests above 250 are automatically split into date partitions to bypass Patch's 250-hit search-key window.",
"maximum": 1000,
"minimum": 1,
"prefill": 3,
"title": "Max results",
"type": "integer"
},
"mode": {
"default": "search",
"description": "What to fetch from Patch.com.",
"editor": "select",
"enum": [
"search",
"byTown",
"byCategory",
"byAuthor",
"byTag",
"events",
"classifieds",
"byUrl"
],
"enumTitles": [
"Search by keyword",
"Browse latest news for a town/city",
"Browse by category",
"Browse articles by author/reporter",
"Browse articles by editorial tag",
"Browse local events (calendar)",
"Browse local classifieds (marketplace listings)",
"Scrape Patch URLs (article, event, classified, town, topic, state or search)"
],
"prefill": "search",
"title": "Mode",
"type": "string"
},
"monitorKey": {
"default": "",
"description": "Optional namespace for monitor state. Give different saved tasks different keys to keep their seen-ID lists separate. Derived automatically from the mode and filters when empty.",
"editor": "textfield",
"prefill": "",
"title": "Monitor key",
"type": "string"
},
"monitorMode": {
"default": false,
"description": "Emit only records whose Patch ID has not been seen by an earlier run with the same monitor key. State is stored in the actor's key-value store.",
"prefill": false,
"title": "Monitor: only new records",
"type": "boolean"
},
"nearLat": {
"description": "Latitude of a point to search near (combine with `nearLng` and `radiusMiles`). News modes only (search/byTown/byCategory/byAuthor/byTag) -- not available for mode=events/classifieds, whose Patch indexes don't expose a filterable location field. Both `nearLat` and `nearLng` must be set together; otherwise this filter is ignored.",
"maximum": 90,
"minimum": -90,
"title": "Near latitude",
"type": "number"
},
"nearLng": {
"description": "Longitude of a point to search near (combine with `nearLat` and `radiusMiles`). News modes only -- see `nearLat` description. Both `nearLat` and `nearLng` must be set together; otherwise this filter is ignored.",
"maximum": 180,
"minimum": -180,
"title": "Near longitude",
"type": "number"
},
"publishedAfter": {
"description": "Only include articles/events/classifieds posted to Patch on or after this date (i.e. listing date, not an event's own occurrence date -- see `eventDateAfter` for that). Format: YYYY-MM-DD. Combine with `publishedBefore` for a date range.",
"editor": "textfield",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"title": "Published after (YYYY-MM-DD)",
"type": "string"
},
"publishedBefore": {
"description": "Only include articles/events/classifieds posted to Patch on or before this date. Format: YYYY-MM-DD. Combine with `publishedAfter` for a date range.",
"editor": "textfield",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"title": "Published before (YYYY-MM-DD)",
"type": "string"
},
"radiusMiles": {
"default": 25,
"description": "Search radius around `nearLat`/`nearLng`, in miles. News modes only -- see `nearLat` description. Ignored unless both `nearLat` and `nearLng` are set.",
"maximum": 500,
"minimum": 1,
"prefill": 25,
"title": "Radius (miles)",
"type": "integer"
},
"regionSlug": {
"default": "",
"description": "US state/edition to scope results to (required for mode=byTown; optional filter on every other mode). \"Across America\" is Patch's national edition (code US); \"US Territories\" is a valid Patch region with no current articles.",
"editor": "select",
"enum": [
"",
"across-america",
"alabama",
"alaska",
"arizona",
"arkansas",
"california",
"colorado",
"connecticut",
"delaware",
"district-columbia",
"florida",
"georgia",
"hawaii",
"idaho",
"illinois",
"indiana",
"iowa",
"kansas",
"kentucky",
"louisiana",
"maine",
"maryland",
"massachusetts",
"michigan",
"minnesota",
"mississippi",
"missouri",
"montana",
"nebraska",
"nevada",
"new-hampshire",
"new-jersey",
"new-mexico",
"new-york",
"north-carolina",
"north-dakota",
"ohio",
"oklahoma",
"oregon",
"pennsylvania",
"rhode-island",
"south-carolina",
"south-dakota",
"tennessee",
"texas",
"us-territories",
"utah",
"vermont",
"virginia",
"washington",
"west-virginia",
"wisconsin",
"wyoming"
],
"enumTitles": [
"(any state - nationwide)",
"Across America (national edition)",
"Alabama",
"Alaska",
"Arizona",
"Arkansas",
"California",
"Colorado",
"Connecticut",
"Delaware",
"District of Columbia",
"Florida",
"Georgia",
"Hawaii",
"Idaho",
"Illinois",
"Indiana",
"Iowa",
"Kansas",
"Kentucky",
"Louisiana",
"Maine",
"Maryland",
"Massachusetts",
"Michigan",
"Minnesota",
"Mississippi",
"Missouri",
"Montana",
"Nebraska",
"Nevada",
"New Hampshire",
"New Jersey",
"New Mexico",
"New York",
"North Carolina",
"North Dakota",
"Ohio",
"Oklahoma",
"Oregon",
"Pennsylvania",
"Rhode Island",
"South Carolina",
"South Dakota",
"Tennessee",
"Texas",
"US Territories",
"Utah",
"Vermont",
"Virginia",
"Washington",
"West Virginia",
"Wisconsin",
"Wyoming"
],
"prefill": "",
"title": "State",
"type": "string"
},
"searchMatch": {
"default": "allWords",
"description": "How multi-word searches match. \"All words\" requires every word anywhere in the headline/summary/topic (more results). \"Exact phrase\" requires the words to appear together (the old behavior).",
"editor": "select",
"enum": [
"allWords",
"exactPhrase"
],
"enumTitles": [
"All words anywhere",
"Exact phrase"
],
"prefill": "allWords",
"title": "Search match",
"type": "string"
},
"searchQuery": {
"description": "Free-text keyword to search for (mode=search; also applies to mode=events/classifieds and to scope URLs). Leave empty to browse the newest articles matching the other filters.",
"editor": "textfield",
"prefill": "city council",
"title": "Search query",
"type": "string"
},
"sortBy": {
"default": "relevance",
"description": "Order of results. \"Nearest first\" requires both `nearLat`/`nearLng` AND mode=search/byTown/byCategory/byAuthor/byTag (news); otherwise it falls back to Relevance. \"Soonest event first\" requires mode=events; on any other mode it also falls back to Relevance.",
"editor": "select",
"enum": [
"relevance",
"newest",
"oldest",
"nearest",
"eventDate"
],
"enumTitles": [
"Relevance",
"Newest first",
"Oldest first",
"Nearest first (requires nearLat/nearLng, news modes only)",
"Soonest event first (requires mode=events)"
],
"prefill": "relevance",
"title": "Sort by",
"type": "string"
},
"startUrls": {
"description": "mode=byUrl only. Paste Patch article, event, classified, town, category/topic, state or search URLs. Article/event/classified URLs are scraped directly; town/topic/state/search URLs are converted into the equivalent scoped query.",
"editor": "requestListSources",
"items": {
"properties": {
"url": {
"description": "A full Patch.com URL (or patch.com/... path).",
"title": "URL",
"type": "string"
}
},
"type": "object"
},
"title": "Patch URLs",
"type": "array"
},
"tagName": {
"default": "",
"description": "Exact editorial tag (required for mode=byTag; on article modes it is an extra filter). Copy it from this actor's `tags` field, e.g. \"Back To School\". Only a minority of articles carry tags.",
"editor": "textfield",
"prefill": "",
"title": "Tag name",
"type": "string"
},
"townSlug": {
"default": "",
"description": "Patch town/city URL slug (required for mode=byTown; requires regionSlug too). Find it in a Patch URL, e.g. patch.com/california/santamonica -> \"santamonica\". Example: \"santamonica\" (with regionSlug=california).",
"editor": "textfield",
"prefill": "",
"title": "Town/city slug",
"type": "string"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "Patch Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
articles | string | optional | Dataset containing all scraped Patch.com records (articles, events or classifieds, depending on the input mode), each tagged with recordType. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "Hyperlocal Patch.com articles, events and classifieds with headline, summary, full body text, author, dates, town/category metadata, coordinates, media and optional detail-page enrichment.",
"properties": {
"articles": {
"description": "Dataset containing all scraped Patch.com records (articles, events or classifieds, depending on the input mode), each tagged with recordType.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Patch articles / events / classifieds",
"type": "string"
}
},
"title": "Patch.com Local News, Events & Classifieds Finder Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"overview": {
"display": {
"component": "table",
"properties": {}
},
"title": "Articles / Events / Classifieds",
"transformation": {
"fields": [
"recordType",
"headline",
"town",
"category",
"author",
"publishedDate",
"eventDate",
"url",
"isBreakingNews",
"commentCount"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Patch.com Local News, Events & Classifieds Finder
Collect hyperlocal US news, local events and classifieds from Patch.com in one run. Search by keyword across the whole country, browse a town or a news category, follow one reporter or editorial tag, open the local events calendar, scan the classifieds board, or paste Patch URLs directly. Every record can include the full body text, article coordinates and expiry, and optional detail-page metadata such as gallery images, author avatars, comment counts, town grade/views/ZIPs, event venue details and classified contact state. No login, cookies, proxy or API key required.
What this actor does
- Eight modes:
search,byTown,byCategory,byAuthor,byTag,events,classifieds,byUrl - Direct URL support: paste article, event, classified, town, topic, state or search URLs and the actor turns them into a record or an equivalent scoped query
- Full body text:
bodyHtml,bodyTextandbodyLengthcome straight from Patch's own search payload, so they cost no extra request - Optional detail enrichment: gallery images with captions/credits, author avatar and points, comment/reply counts, breaking/sponsored/staff flags, town grade/weekly views/ZIPs/timezone/county/metro, event venue/type/website and classified contact-form state
- Article coordinates and expiry:
latitude,longitudeandexpiresDatefor articles; events and classifieds also expose their expiry and event coordinates - Up to 1,000 rows: requests above Patch's 250-hit search window are automatically split into date partitions and deduplicated
- Monitor mode: emit only IDs that a previous run with the same monitor key has not seen
- Search matching control: all-words matching by default, exact-phrase matching when you need it
- Filters: publish-date range, event-occurrence date range, US state/edition, town, news category, classifieds category, author, tag and geo-radius/nearest sorting
- Clean records: empty fields are omitted at every depth; no
null,""or[]values are pushed
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
select | search |
search, byTown, byCategory, byAuthor, byTag, events, classifieds or byUrl |
startUrls |
request list | – | mode=byUrl only. Article, event, classified, town, category/topic, state or search URLs |
searchQuery |
text | – | Keyword to search for; empty means browse with the other filters |
searchMatch |
select | allWords |
allWords (every word anywhere) or exactPhrase (words adjacent, the old behavior) |
authorName |
text | – | Exact byline; required for byAuthor, extra filter elsewhere |
tagName |
text | – | Exact editorial tag; required for byTag, extra filter on article modes |
regionSlug |
select | – | US state/edition, including across-america (national) and us-territories |
townSlug |
text | – | Town/city slug or full town URL; pair with regionSlug for byTown |
category |
select | – | One of 21 Patch news topics |
classifiedCategory |
select | – | One of 11 classifieds categories (classifieds mode only) |
sortBy |
select | relevance |
relevance, newest, oldest, nearest (news + geo), eventDate (events) |
publishedAfter / publishedBefore |
text | – | YYYY-MM-DD bounds on when the record was posted to Patch |
eventDateAfter / eventDateBefore |
text | – | YYYY-MM-DD bounds on the event's own occurrence date (events only) |
nearLat / nearLng |
number | – | Center point for a news geo-radius search; set both together |
radiusMiles |
integer | 25 |
Radius in miles (1–500) |
includeBodyText |
boolean | true |
Add bodyHtml, bodyText, bodyLength |
includeDetails |
boolean | false |
Fetch each record's Patch page for optional enrichment fields |
maxDetails |
integer | 100 |
Detail pages to fetch; 0 means every emitted record |
monitorMode |
boolean | false |
Emit only records not seen by an earlier run |
monitorKey |
text | – | Namespace for monitor state; derived from the query when empty |
maxItems |
integer | 25 |
Maximum records to return (1–1,000) |
regionSlug and townSlug are the two path segments in a Patch town URL: patch.com/california/santamonica gives regionSlug=california, townSlug=santamonica. startUrls accepts full URLs or bare patch.com/... paths; non-Patch URLs are ignored with a warning.
Modes
| Mode | What it does |
|---|---|
search |
Keyword or browse search across Patch articles; combine any filters |
byTown |
Latest articles for one town (requires regionSlug + townSlug) |
byCategory |
Browse one Patch news topic (requires category) |
byAuthor |
Every article matching one exact byline (requires authorName) |
byTag |
Every article carrying one exact editorial tag (requires tagName) |
events |
Patch's local events calendar with venue, type and website enrichment |
classifieds |
Patch's marketplace listings with contact-form state |
byUrl |
Paste Patch article/event/classified URLs for direct records, or town/topic/state/search URLs for scoped queries |
Output fields
Every record includes recordType (article / event / classified) and scrapedAt last. Field availability depends on the content type and on whether detail enrichment is on; anything Patch does not provide is omitted rather than returned as an empty value.
Common fields
headline,shortHeadline,summary,author,authorId,authorUrlpublishedDate,updatedDate(only when changed),urltown,townUrl,state,regionUrl,stateNameimageUrl,imageCount,images[](url,caption,credit,copyrightwhen detail enrichment is on)bodyHtml,bodyText,bodyLength(whenincludeBodyTextis true)expiresDate,contentType,patchId,promotedUntil
Articles
articleId,category,tags,latitude,longitude,distanceMiles(geo runs only)topicId,tagIds,townId- Detail enrichment:
preHeader,authorAvatarUrl,authorPoints,commentCount,replyCount - Detail enrichment:
isBreakingNews,isSponsoredContent,isStaffContent,isPressRelease,isNeighborContent,isNewsPartnerContent,isDailyDigest,isRobot,isExternal,isTopStory,isMostRecent,isShared,isEvergreen,isOriginalContent,contentSource - Detail enrichment:
townGrade,townWeeklyViews,townZipCodes,timezone,countyName,countyFips,metroArea,townLatitude,townLongitude,townType,townModel
Events
eventId,eventDate,eventAddress,eventLat,eventLng,isPromoted,isSharedNationally- Detail enrichment:
eventVenueName,eventStreetAddress,eventCountry,eventWebsite,eventType,eventStatus,interestedCount,sharedTowns[] - Same author, comment, town and image enrichment fields as articles
Classifieds
classifiedId,category,expiresDate,isPromoted,isSharedNationally- Detail enrichment:
contactFormEnabled,thankCount - Same author, comment, town and image enrichment fields as articles
Examples
Nationwide keyword search with full body text:
{
"mode": "search",
"searchQuery": "school board",
"sortBy": "newest",
"includeBodyText": true,
"maxItems": 50
}
One town with detail enrichment:
{
"mode": "byTown",
"regionSlug": "california",
"townSlug": "santamonica",
"includeDetails": true,
"maxDetails": 25,
"maxItems": 25
}
Events happening in a date range:
{
"mode": "events",
"regionSlug": "california",
"townSlug": "santamonica",
"eventDateAfter": "2026-11-01",
"eventDateBefore": "2026-11-30",
"sortBy": "eventDate",
"maxItems": 100
}
Classifieds in one category:
{
"mode": "classifieds",
"classifiedCategory": "housing",
"regionSlug": "texas",
"maxItems": 50
}
Paste any mix of Patch URLs:
{
"mode": "byUrl",
"startUrls": [
{ "url": "https://patch.com/california/santamonica/some-article" },
{ "url": "https://patch.com/california/across-ca" }
],
"includeBodyText": true,
"maxItems": 100
}
Only new records since the previous run:
{
"mode": "search",
"searchQuery": "city council",
"monitorMode": true,
"monitorKey": "santamonica-council",
"maxItems": 100
}
Large runs above 250 rows:
{
"mode": "search",
"searchQuery": "high school sports",
"sortBy": "newest",
"maxItems": 1000
}
How pagination works
Patch's public search key exposes at most 250 hits per query. For maxItems above 250 the actor probes the date range, recursively splits it into created_ts slices (or display_date_ts for sortBy=eventDate), collects each slice under the cap, deduplicates by Patch ID and then sorts the merged result. A bounded request budget prevents runaway calls; if the budget is reached before the requested row count, the status message says so instead of silently short-changing the run. There is no wall-clock cutoff.
Data source
Patch.com's public site and the search service that powers it. The actor bootstraps the scoped search host/key from Patch's own SSR payload on each run, and uses public SSR detail pages only when detail enrichment or URL mode asks for them. It never uses cookies, logins, paid proxies or unofficial credentials.
Limitations
- 250 hits per backend query: handled with date partitioning; extremely dense single-second ranges can still cap a slice.
- Image placeholders: some
imageUrlvalues are Patch layout assets rather than article photos;images[]from detail pages is the gallery source. - Conditional metadata: venue name/street, author avatars, gallery captions and classified contact state appear only when Patch stores them.
- US only: Patch is a US hyperlocal network.
us-territoriesis a valid region but currently has no articles;across-americais the national edition. - Comment text and article view counts: Patch does not expose comment threads, commenter identities or article view counts publicly; only counts and town-level weekly views are available.
- Detail enrichment is optional and per-record: it costs one request per record, so it is off by default and can be capped with
maxDetails.
FAQ
Do I need an API key, cookies or a proxy? No. The actor reads Patch's public search service and public pages directly. Every mode works without credentials or proxy setup.
Is this affiliated with Patch.com? No. It is an independent third-party actor that reads publicly accessible Patch.com data. It is not affiliated with or endorsed by Patch Media.
How do I find a town's regionSlug and townSlug?
Open the town on patch.com and read the URL: patch.com/new-york/manhattan means regionSlug=new-york, townSlug=manhattan. You can also paste the full town URL into byUrl.
How do I find an exact authorName or tagName?
Run another mode first and copy the value from the author or tags field. Patch matches these exactly (case-insensitive), so a guessed value may return zero records.
Why did a keyword search change its result count compared with the old version?
The new default is searchMatch=allWords, which requires every word to appear anywhere in the headline/summary/topic and usually returns more relevant matches than an exact phrase. Set searchMatch=exactPhrase to restore the old phrase-only behavior.
Does the actor return the full article, event or classified body?
Yes. bodyHtml, bodyText and bodyLength are included by default. Set includeBodyText=false to keep records small and avoid the body payload entirely.
What does includeDetails add, and what does it cost?
It fetches each record's Patch page once to add gallery images/captions/credits, author avatars, comment counts, flags, town metadata, event venue/type/website and classified contact state. Failed detail pages never discard the base record; use maxDetails to cap the extra requests.
How do I get more than 250 rows?
Set maxItems up to 1,000. The actor automatically partitions the date range to stay under Patch's per-query window. For very broad queries, narrow the town, category or publish-date range to reduce the number of partitions.
How does monitor mode remember what it has seen?
It stores a bounded list of Patch IDs in a persistent named key-value store (shared across runs) under a key derived from monitorKey (or from the query when no key is given). Reuse the same key across scheduled runs to receive only new records.
How fresh is the data? Results come from Patch's live search index and live pages at run time, so they typically reflect newly published articles/events/classifieds within minutes.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build kgvnqgKSosfpPzZC4. Documentation is regenerated from the default published build; private drafts are not included.