Home / Blog / Host the law, do not guard the door

Host the law, do not guard the door

Cities do not publish their own laws any more. They pay a company to do it.

That company codifies the ordinances, integrates each amendment, keeps the cross-references straight and puts the result online. It is real work and it is worth paying for. Four companies do most of it in California: General Code, who run eCode360; Municode, owned by CivicPlus; American Legal; and Code Publishing, now trading as ICC Code Solutions.

We spent several weeks reading California's local beekeeping ordinances, which meant reading a lot of municipal code through those four front doors. This post is about what we found on the way in, because it turned out to be a more interesting finding than most of the ordinances.

Everything below was measured on 6 August 2026. All of it can be checked in about a minute, and we would rather you checked it than believed us.

The robots file says yes

Every one of these publishers ships a robots.txt that allows everybody, and carries a machine-readable content signal:

Content-Signal: search=yes, ai-train=no, use=reference

That signal has a published definition, printed in the same file. search=yes means permission for "building a search index and providing search results (e.g. returning hyperlinks and short excerpts from your website's contents)."

So on paper: index the codes, quote short excerpts, link back. Granted to everyone, by name of User-agent: *.

The front door says no

We then made one plainly identified request to each publisher, from a client whose user agent named who we were and carried a contact address.

PublisherResponse
eCode360 (General Code)403, Cloudflare interactive challenge
American Legal403, Cloudflare interactive challenge
Code Publishing / ICC403, Cloudflare interactive challenge
Municode200, served

Three of the four will not serve an automated client at all, whatever their robots file says. The challenge is not a rate limit that slows you down. It is a wall that requires a human in a browser.

Which means the permission in the robots file can only really be used by clients that are allowlisted at the network edge, and that list is short: the two or three largest search engines. Everyone else is told yes in one file and no at the door.

Here is the cleanest demonstration we have, and it needed no clever technique. We found the Los Angeles beekeeping section numbers through a Google search, which returned a deep link into American Legal's code library. Google had indexed the page. We then could not fetch the page Google had indexed.

The terms say no as well

Suppose you get in anyway, by being a human with a browser. General Code's terms of use say:

You may not copy, modify, reproduce, republish, distribute, display, or transmit for commercial, non-profit or public purposes all or any portion of this Website.

Commercial, non-profit and public. Between them that is every purpose other than reading it by yourself and telling nobody.

The same document also says the codes "may not reflect the most current legislation adopted by the municipality," are provided "for informational purposes only," and "should not be relied upon as the definitive authority for local legislation," and that "the official copy of any ordinances should be consulted prior to any action or decision being taken."

Read those together and the instruction to a citizen is: do not rely on this, go and find the official copy, and do not republish what you found.

For roughly 162 of the California jurisdictions in our dataset, there is no other online copy. Consulting the official one means going to City Hall.

Municode does none of this, which is the whole point

We would not be writing this if all four behaved the same way. It would just be how the modern web works.

Municode serves an automated request. Its restriction on automated access is about load, not about purpose: through CivicPlus's terms it prohibits a system that sends

more request messages to the CivicPlus servers in a given period of time than a human can reasonably produce in the same period by using a conventional on-line web browser

which is an entirely reasonable thing to ask of anybody. And its copyright clause covers CivicPlus's own proprietary content, not the ordinances it hosts.

One company is saying do not overload our servers. The others are saying do not tell anyone what the law says.

Municode is a large, established business doing this the open way. So the closed way is a choice, not a technical necessity and not a commercial one.

What it costs, and who pays

Here is the part that convinced us this was worth writing about rather than just working around.

When the authoritative copy is unreachable and unquotable, the search results do not go empty. Something else fills them, and what fills them is whatever is not locked down: agency PDFs, old compilations, blog posts, forum answers, secondhand summaries. All of those are stale by construction, because a PDF does not change when an ordinance does.

So the restriction defended as protecting the integrity of the text has the effect of making the least accurate copies the most visible ones.

Our clearest example is first-party. Ventura County rewrote its apiary ordinance in November 2022 and created a full backyard beekeeping regime: a minimum lot size, a hive cap that varies by lot size, a flyway barrier, and a mandatory education course approved by the Agricultural Commissioner. The PDF currently published on the Agricultural Commissioner's own website is the pre-2022 text and contains none of it.

That is the office every beekeeper in the county is legally required to register with. Somebody reading it concludes that backyard beekeeping is impossible, and never learns they owe a course.

There is a second-order version of this. The robots files at generalcode.com, library.municode.com and codelibrary.amlegal.com each name the same eight AI crawlers as disallowed: ClaudeBot, GPTBot, CCBot, Google-Extended, Bytespider, Amazonbot, Applebot-Extended and meta-externalagent. To be exact, because it matters: Googlebot and Bingbot are not blocked, so ordinary search indexing works fine, and anyone saying these companies blocked search would be wrong. But the systems a growing number of people now put their question to cannot read the authoritative source, while every stale secondhand copy of it is wide open to them. You can guess which one ends up in the answer.

None of this is about California

We only measured California, because that is the state whose beekeeping rules we needed. But there is nothing Californian about any of it.

These four companies publish municipal codes across the United States, and between them they have most of the market. They have also been consolidating: qCode, which hosted a large share of California's smaller cities, was acquired and now redirects into eCode360, and Code Publishing now trades as ICC Code Solutions. Every acquisition means one fewer doorway.

Here is the part that makes it general rather than local. The terms of use and the robots file belong to the publisher, not to the city. They are one document per company, served at the company's domain, governing every jurisdiction on the platform. Your town did not negotiate them and almost certainly has never read them.

So a homeowner in Ohio looking up a fence height, a small business in Georgia checking a signage rule, a journalist anywhere reading a police ordinance, and a beekeeper in California measuring a setback all hit the same wall, for the same reason, written by the same four companies. What we measured in California is what you will find in your state, because it is literally the same file.

The only variable is which of the four your city happened to sign with.

The research nobody can do

The individual case is bad enough: one person cannot easily find out what their own city requires. But there is a larger loss, and it is the one we did not expect to run into.

Try asking the simplest question in the field:

What are the beekeeping rules in the United States?

Nobody can tell you. Not a beginner, not a journalist, not a state apiary program, not a university extension service. The answer is not secret, contested or complicated. It is written down, in public, in a few thousand municipal codes. It simply cannot be read at that scale by anyone.

And every follow-up is in the same position. How many US cities effectively prohibit beekeeping through a setback rather than a ban? What is the median distance, and has it moved in twenty years? How many still require pesticide application against feral colonies, and how many now forbid it? Which model ordinances are circulating, who wrote them, and what did each city change on adoption?

Every one of those is answerable in principle. The texts are public law. They are also, in practice, behind challenge pages and a clause forbidding public republication, so answering any of them nationally means a human being clicking through the codes one at a time.

It is worth doing that arithmetic. There are roughly 19,000 incorporated places in the United States, plus about 3,000 counties. Allow fifteen minutes each to find the code, search it, read the section and record the citation, which is optimistic for a site that makes you clear a challenge first and generous about the ones with no beekeeping provision at all. That is somewhere north of five thousand hours. Make it half an hour, which matches our experience rather better, and you are at ten thousand.

Nobody is going to spend ten thousand hours clicking through code portals. That is not a criticism of anyone's diligence. It is simply not a thing a person, a university or a state programme can fund, and so the question stays unanswered permanently.

We know what that costs, because our companion piece on the two model ordinances exists only because we paid a small fraction of it. One state. One narrow topic. Several weeks. And the central finding, that most Californian beekeeping ordinances are copies of one of two originals and that cities have been quietly improving the text as it travels, was invisible from any single city. It only appeared once the codes could be laid side by side.

That is the real cost. The diffusion of model text is the most important thing happening in municipal law, and it is invisible by construction. Cities copy each other because drafting from scratch is worse, which is reasonable. But no city can see what the others have already fixed, no researcher can map it, and no legislature can check whether a rule it is about to copy has already failed somewhere else.

The single change that would most improve local ordinances is letting the people who write them see what everyone else wrote. That is precisely what the current arrangement prevents, and nobody chose it.

What we think the business is

None of this is an argument that codification should be free. It is skilled, continuous work and cities should pay properly for it.

It is an argument about who the customer is.

The customer is the city. The city pays to have its ordinances codified, maintained and hosted, and the city's entire interest is in its law being known: that is what publishing a code is for. The public is not the customer. The public is the beneficiary of a public good the city has already bought.

So gatekeeping the public serves no paying relationship. It is not something the customer asked for, and it is not something the customer benefits from. The service being sold is host our legal documents and keep them current. Somewhere along the way parts of the industry began behaving as though the service were be the only doorway to our legal documents, and those are not the same business.

The honest counter-arguments are two, and both deserve stating.

The first is that a codified compilation involves editorial work, and that work may attract some protection even where the underlying ordinances do not. That is a real argument, and it is why we have not reproduced anybody's compilation. We record what a section says, cite the section, and link back to the publisher.

The second is that unrestricted automated access could let a competitor lift a whole product, and costs bandwidth. Also real. And already solved, by the fourth company on the list: rate limits handle load, and a competitor needs a city's contract rather than a scrape, because the thing being sold is an ongoing relationship, not a static file.

What is left, once those two are dealt with properly, is a rule that stops a beekeeper from quoting their own city's setback requirement. That protects nothing.

Probably nobody decided this

We want to be fair about intent, and being fair happens to make the problem worse rather than better.

This does not look like strategy. The three robots files carry byte-identical signal strings and identical lists of blocked crawlers, which is an unmodified managed default rather than a considered position. The terms of use were written years before anybody had to think about what a content signal was. The Cloudflare challenge is a security setting that somebody switched on for entirely ordinary reasons.

But drift is not random, and the direction is the tell. Nobody accidentally ships a default that makes their product more open. Every one of these settings fails closed, and no one is placed to notice: the paying customer never tries to fetch its own code with a script, and the affected party, the public, has no relationship with the vendor and nowhere to file a complaint.

A deliberate policy can be argued with. Drift with no feedback loop cannot, and it only ever ratchets one way.

What we did about it

We read the codes by hand where the terms told us to stop, which is most of them, and cited every rule to the section it comes from. Where a code could not be reached at all we said so on the record rather than filling the gap: Calipatria publishes no municipal code online, and Tulelake's site is currently flagged as compromised.

The result is published: what every California city and county requires, with the section and a link to the source, so you can read the words yourself.

See the California regulations

We have no quarrel with any of these companies, and we would rather this were read as a bug report than an accusation. Three changes, to settings that were almost certainly never chosen on purpose, would fix the whole thing: serve automated clients at a sane rate, scope the republication clause to the compilation rather than to the law inside it, and make the terms agree with the robots file.

Municode already does all three, and is still in business.

Measured 6 August 2026. Quotations are from the publishers' own robots files and terms of use, current on that date. This is a description of what we observed and what we conclude from it, not legal advice, and nothing here is a claim about anybody's rights.

← All posts