Dataspryva

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.

FieldTypeRequiredDescription
modestringrequiredWhat to fetch from Patch.com.
startUrlsarrayoptionalmode=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.
searchQuerystringoptionalFree-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
FieldTypeRequiredDescription
modestringrequiredWhat to fetch from Patch.com.
startUrlsarrayoptionalmode=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.
searchQuerystringoptionalFree-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.
searchMatchstringoptionalHow 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).
authorNamestringoptionalExact 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".
tagNamestringoptionalExact 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.
regionSlugstringoptionalUS 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.
townSlugstringoptionalPatch 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).
categorystringoptionalNews 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.
classifiedCategorystringoptionalClassifieds 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.
sortBystringoptionalOrder 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.
publishedAfterstringoptionalOnly 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.
publishedBeforestringoptionalOnly include articles/events/classifieds posted to Patch on or before this date. Format: YYYY-MM-DD. Combine with `publishedAfter` for a date range.
eventDateAfterstringoptionalmode=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".
eventDateBeforestringoptionalmode=events only. Only include events occurring on or before this date. Format: YYYY-MM-DD. Combine with `eventDateAfter` for a date range.
nearLatnumberoptionalLatitude 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.
nearLngnumberoptionalLongitude 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.
radiusMilesintegeroptionalSearch radius around `nearLat`/`nearLng`, in miles. News modes only -- see `nearLat` description. Ignored unless both `nearLat` and `nearLng` are set.
includeBodyTextbooleanoptionalAdd 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.
includeDetailsbooleanoptionalFetch 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.
maxDetailsintegeroptionalHow many records to enrich when `includeDetails` is on. 0 means every emitted record (up to `maxItems`). Ignored when detail enrichment is off.
monitorModebooleanoptionalEmit 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.
monitorKeystringoptionalOptional 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.
maxItemsintegeroptionalMaximum 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.

FieldTypeRequiredDescription
articlesstringoptionalDataset 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, bodyText and bodyLength come 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, longitude and expiresDate for 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, authorUrl
  • publishedDate, updatedDate (only when changed), url
  • town, townUrl, state, regionUrl, stateName
  • imageUrl, imageCount, images[] (url, caption, credit, copyright when detail enrichment is on)
  • bodyHtml, bodyText, bodyLength (when includeBodyText is 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 imageUrl values 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-territories is a valid region but currently has no articles; across-america is 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.

Open the step-by-step Python guide →

Source build kgvnqgKSosfpPzZC4. Documentation is regenerated from the default published build; private drafts are not included.