Municode Records Scraper avatar

Municode Records Scraper

Pricing

from $4.00 / 1,000 municode records

Go to Apify Store
Municode Records Scraper

Municode Records Scraper

Search a city or county's Municode Library for code sections and ordinances, such as zoning or short-term rental rules. Returns source URLs, titles, sections, excerpts and optional code-section full text for legal research and compliance. No minutes or agendas. About USD 5 per 1,000 records.

Pricing

from $4.00 / 1,000 municode records

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Features

Limited permissions

Share

Municode Records Scraper searches a city or county's Municode Library for municipal code sections and adopted ordinances that match your keywords, and returns each match with its title, source link and search excerpt, plus the section number, place in the code, code edition and optional full text for code sections. It is built for legal researchers, compliance analysts, local-government teams and short-term rental or property professionals checking local rules, and it costs about USD 5 per 1,000 records on the FREE tier (USD 4 on GOLD).

Enter a municipality and state, such as Riverside, CA, and a phrase such as short-term rental, or paste library links. The Actor reads the public JSON data behind library.municode.com, the data the website shows every visitor, so typical runs finish in seconds to a few minutes.

What does Municode Records Scraper return?

One dataset record per unique code section or adopted ordinance that matches your search or that you link directly, each with a link to its page in the library. A code-section record from a Riverside, CA search for short-term rental, then a truncated ordinance record:

[
{
"municipality": "Riverside",
"state": "CA",
"contentType": "codeSection",
"title": "5.55.020 - Definitions.",
"section": "5.55.020",
"path": "Title 5 - BUSINESSES > Chapter 5.55 - SHORT-TERM RESIDENTIAL RENTALS",
"matchedText": "owner's short-term residential rental to surrender the subject dwelling unit before the expiration of the initial rental term that results in an actual rental term of 30",
"fullText": null,
"url": "https://library.municode.com/ca/riverside/codes/code_of_ordinances?nodeId=PTIICOOR_TIT5BU_CH5.55SHRMRERE_5.55.020DE",
"nodeId": "PTIICOOR_TIT5BU_CH5.55SHRMRERE_5.55.020DE",
"codeName": "Code of Ordinances",
"codeVersion": "Supplement 33",
"codifiedThrough": "Ordinance No. 7776, enacted June 23, 2026.",
"ordinanceYear": null,
"searchQuery": "short-term rental",
"source": "Municode Library",
"scrapedAt": "2026-10-31T12:00:00.000Z"
},
{
"contentType": "ordinance",
"title": "Ordinance No. 7678",
"section": null,
"path": "2024",
"fullText": null,
"url": "https://library.municode.com/ca/riverside/ordinances/code_of_ordinances?nodeId=1314573",
"codeVersion": null,
"codifiedThrough": null,
"ordinanceYear": 2024
}
]
FieldWhat it holds
municipalityCity or county name as Municode lists it
stateTwo-letter US state
contentTypecodeSection (code of ordinances) or ordinance (ordinance bank)
titleSection heading, or the ordinance number
sectionSection number such as 5.55.020; null for ordinances
pathTitle > chapter above the section, or the year for an ordinance; null for a section read from its URL
matchedTextMunicode's search excerpt; null for a section read from its URL
fullTextSection text up to 30,000 characters with includeFullText; null for ordinances
urlLink to the section or ordinance in the library
nodeIdLibrary node ID from that link
codeNameName of the code, such as Code of Ordinances
codeVersionCode edition, such as Supplement 33; null for ordinances
codifiedThroughLast ordinance codified into that edition; null for ordinances
ordinanceYearOrdinance year; null for code sections
searchQueryThe phrase that found the record (the first one when several do); null for a section read from its URL
sourceAlways Municode Library
scrapedAtWhen the record was collected (ISO 8601)

Each run also writes a SUMMARY record to its key-value store with the outcome (DATA, EMPTY, REJECTED, BLOCKED, FAILED or ABORTED), counts, warnings, the request count and the stop reason; diagnostics never go into the dataset. Export the dataset as JSON, CSV or Excel, or read it through the API.

What can I use it for?

Use it to find and cite the local rules on one topic in a city's or county's code without clicking through the library:

  • Short-term rental and zoning rules, such as Riverside's Chapter 5.55 or accessory dwelling unit and setback provisions.
  • Legal research and compliance, with the link and code edition for every section you cite.
  • Adopted ordinances matching a keyword, with number, year and link.
  • Data pipelines and AI tools that need source-linked JSON.

When should I not use it?

Do not use it for meeting minutes or agendas, the text of ordinance PDFs, one search across every municipality at once, or records tied to a street address or parcel. It returns code sections and adopted ordinances from one municipality's library per search scope. For neighboring tasks, these Actors fit better:

How do I run it?

Enter a municipality, its two-letter state and one or more search phrases. The Actor searches that city's or county's code of ordinances and saves each matching section.

FieldWhat to enterDefault (Console prefill)
searchQueriesUp to 10 keywords or phrases (2–160 characters) to search in the municipality's library. Leave empty to read only section URLs.none (short-term rental)
municipalityCity or county name as Municode lists it, such as Riverside, Riverside County or Miami-Dade County; capitalization and punctuation do not matter (up to 120 characters).none (Riverside)
stateTwo-letter US state, such as CA. Required with municipality.none (CA)
contentTypecodes (code sections from the code of ordinances), ordinances (adopted ordinances from the ordinance bank) or both.codes
startUrlslibrary.municode.com links. A code-section URL (/codes/...?nodeId=) returns that section; ordinance links are not read directly. A municipality URL (https://library.municode.com/ca/riverside) adds a municipality to search; a code URL (.../ca/riverside/codes/code_of_ordinances) also limits the search to that code. Section URLs do not set a municipality. Up to 10 municipalities per run, counting the municipality field.none
maxItemsMaximum unique records saved and charged, 1–500.25 (3)
includeFullTextAdds each code section's full text, up to 30,000 characters (one extra request per chapter, no extra charge). Not available for ordinances, which are PDFs.false

A keyword search needs a municipality: enter municipality and state, or add a municipality or code URL to startUrls.

Short-term rental rules in Riverside, California (the Console prefill):

{
"searchQueries": ["short-term rental"],
"municipality": "Riverside",
"state": "CA",
"maxItems": 3
}

This searches Riverside's code of ordinances (contentType defaults to codes) and saves up to three matching sections. Raise maxItems for real work, or set contentType to both to add adopted ordinances.

Library links instead of a municipality name:

{
"searchQueries": ["accessory dwelling unit"],
"startUrls": [
{ "url": "https://library.municode.com/ca/riverside/codes/code_of_ordinances" },
{ "url": "https://library.municode.com/ca/riverside/codes/code_of_ordinances?nodeId=PTIICOOR_TIT5BU_CH5.55SHRMRERE_5.55.020DE" }
],
"includeFullText": true,
"maxItems": 20
}

The code URL runs the search in Riverside's Code of Ordinances only, and the section URL returns section 5.55.020 on its own. includeFullText adds the full text of every code section in the run.

How do I use it from an AI assistant?

Municode Records Scraper works from Claude, ChatGPT, Cursor or any other MCP client through Apify's MCP server. Add it with the single-tool URL https://mcp.apify.com/?tools=muhammadafzal/municode-records-scraper, then ask, for example: "Use Municode Records Scraper to find Riverside, California's short-term rental rules and list each section number, title and link."

How much does it cost? Pricing per tier

About USD 5 per 1,000 records on the FREE tier and USD 4 on GOLD, plus a start fee per run. Pricing is pay per event, and Apify platform usage is included.

TierPer record (municode-record)Start fee (apify-actor-start, per started GB of memory)
FREEUSD 0.005001USD 0.010001
BRONZEUSD 0.004875USD 0.009750
SILVERUSD 0.004750USD 0.009500
GOLDUSD 0.004000USD 0.008000

PLATINUM and DIAMOND pay the GOLD prices. The start fee is charged once per started GB of allocated memory; runs use 256 MB by default, so a default run pays one start event.

Representative totals on the FREE tier at the default memory:

  • 3 records (the Console prefill): 3 × USD 0.005001 + USD 0.010001 = USD 0.025004
  • 25 records: 25 × USD 0.005001 + USD 0.010001 = USD 0.135026
  • 100 records: 100 × USD 0.005001 + USD 0.010001 = USD 0.510101

A record is charged once, after it is saved, even when several search phrases find it. A search that finds nothing, or a municipality name that is not found, charges no records; only the start fee applies. If you set a maximum cost per run, the Actor stops at that limit and keeps the records already saved.

What are the limitations?

It searches one municipality per search scope, returns codes and ordinances only, and saves up to 500 records per run.

  • One municipality per search scope, up to 10 per run. To search several municipalities, add one municipality or code URL per municipality to startUrls (10 at most). maxItems is shared by the whole run and fills municipality by municipality and query by query, code sections before ordinances, so raise it when you add municipalities, queries or both.
  • Codes and ordinances only. Municipal documents (minutes, agendas) and PDFs are not extracted.
  • Ordinance full text is not available. Municode publishes ordinances as PDFs only.
  • Up to 500 records per run. Typical runs finish in seconds to a few minutes.
  • Latest published edition. Data is whatever Municode currently publishes (the latest supplement). It is not legal advice, and Municode Records Scraper is not affiliated with Municode or CivicPlus.

FAQ

Why do I have to name a municipality?

Municode offers search across all municipalities only as a paid subscription feature, so the Actor searches one municipality's library at a time. Enter municipality and state, or add the municipality's library URL to startUrls, one URL per municipality, up to 10 per run.

Does it include the full text of ordinances?

No. Municode publishes adopted ordinances as PDFs, which the Actor does not extract, so fullText stays null for them; each ordinance record still has its number, year and link. For code sections, turn on includeFullText to get up to 30,000 characters per section at no extra charge.

What happens if my municipality name is not found?

The run ends with a warning that lists close matches. It saves and charges no records; only the start fee applies. Use the name as Municode lists it, such as Riverside County or Miami-Dade County, with its two-letter state, or paste the municipality's library URL into startUrls.

Are free Apify accounts limited?

No. Free and paid accounts get the same limits, including up to 500 records per run, at their pricing tier's record price.

Can I use it as a Municode API?

You can use it like one: call it through the Apify API, a client library or Apify's MCP server and get JSON records back. It is an independent Actor, not an API published by Municode, and it is not affiliated with Municode or CivicPlus.

Can I look up zoning rules for a street address?

No. There is no address or parcel lookup; search the municipality's code for a zoning term such as setback instead. For owner, assessor and tax data by address or parcel, use County Property Records API.

How current is the data?

Records reflect what Municode publishes at run time. Code sections carry codeVersion (such as Supplement 33) and codifiedThrough (the last ordinance codified into that edition), so you can cite the exact edition. Confirm important provisions with the municipality before relying on them.

Last verified: 2026-10-31