# US State AI Law API: Statutes, Dates & Official Citations (`friendlyapi/state-ai-law-tracker`) Actor

Every US state AI law as structured, versioned JSON with official citations: obligations, staged effective dates, enforcement and amendment history. Includes documented cases where public trackers contradict the official record. Uncovered states return unknown, never 'no law'.

- **URL**: https://apify.com/friendlyapi/state-ai-law-tracker.md
- **Developed by:** [FriendlyAPI](https://apify.com/friendlyapi) (community)
- **Categories:** Business, Developer tools, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $60.00 / 1,000 law searches

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## US State AI Law API: statutes, effective dates and official citations

**The free trackers are wrong, and this API ships the receipts.**

Every record here was verified against the state's own legislature or codified
statute, not against another tracker. Where the trackers disagree with the
official record, the disagreement is **in the dataset as a queryable finding**,
with the source that settles it. There are **37 of them** in the current corpus.

Here are three, quoted from the data you get back:

> **Colorado AI Act reported as in force: it was repealed before it ever
> operated.** As of 2026-08, widely-syndicated summaries (including the
> Wikipedia 'Colorado AI Act' article and multiple vendor compliance blogs)
> still state that the Colorado AI Act 'commenced on June 30, 2026' and
> describe its duty of care, risk-management programs and impact assessments as
> live obligations. Verified against the official Colorado General Assembly
> record: SB 24-205's duties were delayed to 2026-06-30 by SB 25B-004 (signed
> 2025-08-28), AG enforcement was stayed by joint motion in *xAI v. Weiser*,
> No. 1:26-cv-01515 (D. Colo.) on 2026-04-27, and SB 26-189 (Chapter 131,
> signed 2026-05-14) repealed and reenacted the entire article with a
> disclosure-based framework whose compliance date is 2027-01-01. A buyer
> relying on the incumbent summaries would build to a risk-management and
> impact-assessment regime that no longer exists in Colorado law.

> **New York RAISE Act: the signed text is not the operative text.** The
> official nysenate.gov page for S6953B (Chapter 699 of 2025, signed
> 2025-12-19) still states the effective date as 'ninety days after it becomes
> law'. The operative statute is the chapter-amended version: S8828, signed
> 2026-03-27 as Chapter 96, which moved the effective date to 2027-01-01,
> replaced the compute-cost coverage test with a $500 million revenue test,
> reduced penalties from $10M/$30M to $1M/$3M, and created an oversight office
> inside the Department of Financial Services. Any tracker that captured the
> law at signing is wrong on the date, the covered population, the penalty and
> the regulator simultaneously.

> **Connecticut tracked as 'SB 2': the enacted law is SB 5 / Public Act
> 26-15.** Connecticut SB 2 is the bill number carried by every 50-state AI
> survey from 2024 through early 2026, because SB 2 passed the Connecticut
> Senate in both 2024 and 2025. It never became law in either year. The
> comprehensive act that WAS enacted is SB 5 of the 2026 session, signed
> 2026-06-02 as Public Act 26-15 (the CART Act), verified against the
> Governor's official press release. Trackers keyed to bill numbers rather than
> session laws will either show Connecticut as having no comprehensive AI law
> or show a dead bill.

Note what those three have in common: **a careful researcher reading the
official page still gets New York wrong**, because the official page itself
displays the superseded text. That is the work this API is doing for you.

### Why this exists

The closest incumbent, AILawsByState, sells a **$39/month** human-readable
tracker and puts **API access behind a $499/month Enterprise tier**. Everyone
else in this space sells a PDF chart, a law-firm newsletter, or a seat licence.

**Nobody sells the developer API.** That slot is empty, and this fills it: JSON
in, JSON out, stable ids, official citations, one call.

### What you get back

| | |
|---|---:|
| Enacted laws and adopted regulations | **57** |
| Jurisdictions covered | **24** (23 states + New York City) |
| Categories | **7** |
| Staged effective dates, individually queryable | **122** |
| Recorded tracker discrepancies | **37** |
| Records whose official URL was actually fetched and content-matched | **116 of 118** |
| Pending bills tracked | **3** |

Every law record carries: state, citation of record, codified cite, popular
name, category, plain-English summary, status, **every staged date with what
happens on it**, who it covers, the obligations as a list, enforcement and
penalties, amendment history, the official URL, whether that URL was verified,
and a review flag marking legally complex records, with the reason in `notes`.

Categories: `comprehensive-ai`, `ncii-digital-replica`, `health-ai`,
`deepfakes-elections`, `ai-hiring`, `chatbot-disclosure`, `gov-procurement`.

### Modes

| Mode | What it does | Billing |
|---|---|---|
| `search_laws` | Filter by state, category, status, in-force, date window, who-it-covers, or full text across summaries and obligations | 1 event per call |
| `effective_calendar` | Give it a date window, get back the obligations that start (or end) in it | 1 event per call |
| `law_detail` | One law in full, plus the tracker discrepancies that bear on it | 1 event per call |
| `discrepancies` | Where the public trackers are wrong, and what settles it | 1 event per call |
| `coverage` | Counts, freshness, corpus version, and the honest coverage map | **free** |

One event per call, not per row, a calendar query that returns forty
obligations costs the same as one that returns none.

### The compliance calendar, in one call

```json
{"mode": "effective_calendar", "from_date": "2026-08-01", "to_date": "2027-01-31"}
```

Returns one entry per staged date, the date, what happens on it, and the
law's obligations, because a single act stages several. Colorado's
replacement act stages four dates; California's CPPA ADMT regulations stage
seven, out to 2030. "What lands on me in Q1" is an indexed query here, not a
pile of statutes to read.

### Stable ids, because everything else moves

`law_id` is keyed on (state, citation of record). It survives what actually
changes: status, effective dates, penalties, the regulator, even the codified
cite. Measured on this corpus, Washington's citation moved from RCW ch. 42.62
to ch. 29B.35 on 2026-01-01; Utah's disclosure duty moved from § 13-2-12 to
§ 13-75-103 on 2025-05-07 and the old section was expressly repealed. Store the
`law_id`, not the cite.

### Repealed laws stay in the dataset, on purpose

`status` is one of `effective`, `upcoming-effective-date`, `amended`,
`enacted`, `enjoined_in_part`, `repealed`, and each carries a coarse
`in_force` flag (`yes` / `partial` / `not_yet` / `no`). Filter them out when you
want today's duties, but **"this is no longer the law" is an answer worth
having**, and it is the answer the free trackers are getting wrong about
Colorado right now.

`enjoined_in_part` is flagged rather than resolved, because it cannot be
resolved into a boolean: California's election-deepfake package has four
provisions with three different fates and an undecided Ninth Circuit appeal.

### Coverage, stated honestly, and why we never say "no law"

Call `coverage` (free) for the live map. It reports every jurisdiction as
either **`covered`** or **`unknown`**, and there is deliberately no third
value.

**We do not claim that any state has no AI law.** 41 jurisdictions are covered;
the other 28 are *unswept*, not *empty*. That distinction is the whole product:
a compliance buyer who reads "no law in Ohio" and ships accordingly has been
handed a false negative, and Ohio has two AI bills in this dataset's own
pending table. Where we already hold evidence that an empty reading would be
wrong (Arizona, Ohio, Georgia, New Jersey, Massachusetts, Virginia and more),
the `unknown` entry says so and names the lead.

The same rule holds inside a covered state: a category we did not sweep there
comes back `unknown`, not empty. Per-category completeness is published in the
same call, in the category's own terms, for example, `gov-procurement` is
**5 states, not 50**, and says so; `deepfakes-elections` is explicitly
non-exhaustive (Kentucky SB 4 contains a synthetic-media election provision and
is not yet recorded as an election record, a gap we found in our own data and
published rather than hid).

Freshness is auditable too: every response carries `corpus_version`,
`corpus_as_of` and the corpus file's sha256.

### Refresh: status churn is what goes stale, not new enactments

Five laws in this corpus produced **15 status changes in about two years**.
Colorado SB 24-205 alone changed four times: enacted, delayed, judicially
stayed, repealed and reenacted. A quarterly refresh would have served the wrong
Colorado answer for up to three months, at the exact moment the market cared
most. Records with a future staged date, an `upcoming-effective-date` status or
an `enjoined_in_part` status are the ones that move, and they are queryable as
such.

### Typical uses

- A compliance calendar inside your own product, keyed to the states you sell in
- Gating a feature by jurisdiction (an AI therapy feature is lawful in Utah with
  disclosures and **prohibited outright** in Illinois and Nevada, the category
  name "chatbot disclosure" hides that, and the obligations text does not)
- Due diligence and policy research with citations you can click through
- Feeding an LLM structured, cited law instead of letting it recall AI statutes
  from memory

### Honest limits

- **Not legal advice.** Structured legal information with official citations.
  Verify against the linked official source before acting; **84 of 118 records
  carry a review flag** for legal complexity, and each says why in its `notes`.
- **41 jurisdictions, not 51.** Everything else returns `unknown`, never
  "no law". See the coverage section above. this is the limit we are most
  insistent about, because it is the one that could hurt you.
- **Two records could not have their official URL fetched** (Utah SB 149,
  le.utah.gov 404s the 2024 enrolled-bill path; Indiana HEA 1133, iga.in.gov
  is a JavaScript shell). Both say so in their own `url_verified` field and
  notes, and both were established from other official texts.
- **Connecticut is the weakest verification in the corpus:** cga.ct.gov serves
  an incomplete TLS certificate chain and could not be fetched at all, so both
  Connecticut records rest on the Governor's official press release plus
  secondary law-firm analysis. Published as a caveat, not buried.
- **Some codified cites are article-level rather than section-level**, and each
  such record says so.

Methodology: every record is built from, and checked against, the official primary source, and each source's URL and as-of date are published so you can verify any result yourself.
Public trackers (NCSL, Public Citizen, IAPP) were used as leads only; every
citation of record is an official source.

**Support:** friendlyapidev@gmail.com

***

## Terms of Use

**Effective 9 August 2026.** These Terms govern this and every other data service published by the Provider. "The Provider" means the operator of the Service, reachable at **friendlyapidev@gmail.com**. "The user" means anyone who accesses the Service, paid or free. By using it you agree to them.

*§1's consumer-reporting provisions and §5's prohibition on decisions about individuals are directed principally at services that return records about named people.*

### 1. What this service is

The Service provides **structured data compiled from public government
sources**. It is an information product. It is **not** legal advice, not a
compliance determination, and not a background-check or consumer report.

Nothing in the Service constitutes a verdict about any person or entity. The
Service returns **candidate matches with confidence scores and source
provenance**, which a competent human must review before any action is taken.

**The Provider is not a consumer reporting agency**, and nothing the Service
returns is a "consumer report" or "investigative consumer report" within the
meaning of the Fair Credit Reporting Act (15 U.S.C. § 1681 et seq.) or any
state analogue. The Service is not assembled or evaluated for the purpose of
establishing a consumer's eligibility for employment, credit, insurance, or
housing, and the Provider does not follow the procedures the FCRA requires of
consumer reporting agencies. Permitted uses are set out in §5.

### 2. No warranty

THE SERVICE AND ALL DATA ARE PROVIDED "AS IS" AND "AS AVAILABLE", WITHOUT
WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
WARRANTY OF ACCURACY, COMPLETENESS, CURRENCY, MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, OR NON-INFRINGEMENT.

Specifically, and without limiting the above, the Provider does **not**
warrant that:

- the data is complete, current, or free from error;
- every relevant record has been collected, or that any particular
  jurisdiction, list, or record is included;
- a "no match" result means a person or entity is not subject to any
  exclusion, sanction, action, or legal obligation;
- source publications will remain available, unchanged in format, or on any
  particular schedule.

### 3. The data comes from third parties we do not control

All data is derived from **public government publications**. Those publishers
control what they publish, when, in what format, and whether it is accurate.
They change formats without notice, take sites offline, and publish records
containing their own errors. The Provider reproduces and normalises what those
sources publish and **does not independently verify the truth of any
underlying record**.

Each result identifies the source it came from, and the Service publishes the
as-of date and official URL of every source it carries, so any result can be
checked against the government publication it derives from.

### 4. The user's verification duty

The user is solely responsible for verifying any result against the official
primary source before relying on it or acting on it, and for obtaining
professional advice appropriate to their circumstances.

**The Service's published coverage statement is part of these Terms.** It
states which jurisdictions are collected automatically, which are published by
their source in a form the Service does not collect, and which publish nothing
at all. A user who acts on the Service without reading it does so at their own
risk.

### 5. Acceptable use

**Permitted.** Query the Service, integrate it into your own product, and
display individual results to your own users, including as part of a
compliance workflow you operate.

**Prohibited.** The user shall not:

1. **Use the Service, in whole or in part, as a factor in any decision about
   an individual's employment, engagement, retention, promotion, credit,
   insurance, housing, or eligibility for any benefit.** The Service is not a
   consumer report (§1). Screening obligations that arise from law or
   regulation must be discharged against the official primary source, and any
   decision about a person must rest on that verified source and the user's
   own judgement, not on this Service.
2. Extract, copy, or redistribute the dataset in bulk, or use it to build,
   train, or populate a competing dataset or data feed. (Querying the Service
   and showing results to your own users is expressly permitted above.)
3. Use the Service in violation of any law, or to re-identify, harass, or
   defame any individual appearing in the data.

A record in these datasets means only that a government body published it.
It is not a finding by the Provider about any person.

### 6. Limitation of liability

TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE PROVIDER SHALL NOT BE LIABLE FOR
ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE
DAMAGES, OR FOR ANY LOSS OF PROFITS, REVENUE, DATA, GOODWILL, OR BUSINESS
OPPORTUNITY, ARISING OUT OF OR RELATING TO THE SERVICE, WHETHER IN CONTRACT,
TORT (INCLUDING NEGLIGENCE), OR ANY OTHER THEORY, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

THE PROVIDER'S TOTAL AGGREGATE LIABILITY ARISING OUT OF OR RELATING TO THE
SERVICE, IN THE AGGREGATE AND FOR ALL CLAIMS COMBINED, SHALL NOT EXCEED **ONE
HUNDRED US DOLLARS (US$100)**.

The user acknowledges that this limitation is a material part of the bargain,
that the fees charged reflect it, and that the Provider would not offer the
Service on these terms without it.

Two notes on why the cap is a flat figure rather than a multiple of fees. It
is never zero. A cap of zero for a user who paid nothing invites the argument
that the clause is illusory, and a court that agrees may strike the whole
limitation rather than read it down. And it is fixed rather than computed, so
there is nothing to reconstruct from billing records years later.

Nothing in these Terms excludes or limits liability that cannot lawfully be
excluded or limited. If any part of this section is held unenforceable, the
remainder continues to apply to the fullest extent permitted.

### 7. Indemnity

The user shall indemnify and hold the Provider harmless from any claim arising
from the user's use of the Service, including any decision made in reliance on
it and any breach of §5.

### 8. Availability and changes

The Service may change, add, or remove data sources and coverage at any time,
and may be unavailable. Changes to coverage are reflected in the published
coverage statement.

### 9. Governing law

These Terms are governed by the laws of the **State of New York**, without
regard to conflict-of-laws principles. The parties submit to the **exclusive
jurisdiction of the state and federal courts located in the State of New
York**, and each waives any objection to that venue.

Disputes are resolved in court; these Terms do not require arbitration.

### Pricing

Pay per event, no subscription. Prices fall on higher Apify plans.

| Event | What triggers it | Price |
|---|---|---|
| `law_search` | One search across the corpus | **$0.10** (from $0.06) |
| `calendar_query` | One compliance-calendar window | **$0.25** (from $0.15) |
| `law_detail` | One full law record | **$0.05** (from $0.03) |

Checking the whole US map once a week costs a few dollars a month.

### 10. Contact

**friendlyapidev@gmail.com**

Support is handled by email. There is no telephone support and no guaranteed
response time.

***

# Actor input Schema

## `mode` (type: `string`):

search\_laws = filtered law search; effective\_calendar = what lands in a date window; law\_detail = one law in full with the tracker discrepancies that bear on it; discrepancies = where the public trackers are wrong; coverage = counts, freshness and the honest coverage map (free)

## `state` (type: `string`):

State name or postal code (e.g. 'California' or 'CA'), 'District of Columbia'/'DC', or 'New York City'/'NYC'. A jurisdiction we have not swept returns UNKNOWN, never 'no law', read coverage\_for\_query on every response.

## `category` (type: `string`):

One of: comprehensive-ai, ncii-digital-replica, health-ai, deepfakes-elections, ai-hiring, chatbot-disclosure, gov-procurement

## `status` (type: `array`):

Any of: effective, upcoming-effective-date, amended, enacted, enjoined\_in\_part, repealed. Empty = all. Repealed laws are kept in the dataset on purpose, several are still reported as live obligations by public trackers.

## `in_force` (type: `array`):

Coarse binding flag, any of: yes, partial, not\_yet, no. Use \['yes','partial'] for 'what binds me today'.

## `effective_after` (type: `string`):

ISO date. Matches laws with a staged date on or after this. Combined with effective\_before, the SAME staged date must satisfy both, i.e. something happens inside your window.

## `effective_before` (type: `string`):

ISO date. Matches laws with a staged date on or before this.

## `covers_text` (type: `string`):

Substring match against the law's coverage text, e.g. 'insurer', 'employer', 'developers'.

## `q` (type: `string`):

Full-text search across each law's summary and obligations (plus its name and citation), e.g. 'impact assessment', 'utilization review', 'RAISE Act'.

## `law_id` (type: `string`):

Stable id from any search result. Keyed on (state, citation of record), so it survives status, date, penalty and codified-cite changes.

## `from_date` (type: `string`):

ISO date, e.g. 2026-08-01

## `to_date` (type: `string`):

ISO date, e.g. 2026-12-31

## `limit` (type: `integer`):

1-500. Default 100 for search\_laws, 500 for the calendar.

## `offset` (type: `integer`):

Pagination offset.

## Actor input object example

```json
{
  "mode": "search_laws",
  "state": "NY",
  "category": ""
}
```

# Actor output Schema

## `results` (type: `string`):

Every matching law with its official citation.

## `csv` (type: `string`):

For dropping into a compliance tracker.

## `runInConsole` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search_laws",
    "state": "NY"
};

// Run the Actor and wait for it to finish
const run = await client.actor("friendlyapi/state-ai-law-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search_laws",
    "state": "NY",
}

# Run the Actor and wait for it to finish
run = client.actor("friendlyapi/state-ai-law-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search_laws",
  "state": "NY"
}' |
apify call friendlyapi/state-ai-law-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,friendlyapi/state-ai-law-tracker"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/zO6WbbggqOsnOS8OQ/builds/qmoIqUJr8f4GYKqKZ/openapi.json
