# Web research

MAIA's web research takes a question the data cannot answer and returns an answer from the public web, with links to the pages it rests on.

Updated: 2026-09-30. Source: https://maia-analytics.com/docs/enrichments/web-research

## What it answers

Core data holds what is recorded. The web holds what is published: an ordinance, a company's commitments, a program's rules.

> **You ask:** Which candidates allow BESS by right, and what setbacks apply in that municipality?

> **Note:** An ordinance is written per municipality, not per parcel. Run a question like this on the shortlist, not on every parcel in the county. As a column on 5,000 parcels, the same research runs 5,000 times and every row spends credits. See [Run an enrichment](https://maia-analytics.com/docs/enrichments/run-an-enrichment).

## What you get

| Part | What it holds |
| --- | --- |
| Value | The answer, typed as yes or no, a number, a category, a link, or text |
| Reasoning | One or two sentences that lead with the finding |
| Sources | The pages the answer rests on, with links |

When the research finds nothing it can support, the cell reads **Unavailable** and the reasoning says what was checked. A web answer with no research behind it is also rejected and reads Unavailable. See [Sub-agents](https://maia-analytics.com/docs/capabilities/sub-agents).

## What it is for

MAIA reaches for the web last, after the project's own data, core data, and public GIS layers. A record is faster and spends fewer credits.

| Use web research for | Not for |
| --- | --- |
| What an ordinance permits | A parcel's acreage, owner, or zoning code |
| What a company has published | Anything already in a column of the project |
| A program's rules and deadlines | A fact MAIA's core data holds |
| A public page | A page behind a login or a paywall. It cannot be a source |

> **Note:** A zoning code is the name of a district. It is not a ruling on what you may build. MAIA says what a code allows only after it has read the ordinance. Without that, it marks the claim unverified rather than answering from memory. See [Gaps in the records](https://maia-analytics.com/docs/using-maia/review#gaps-in-the-records).

## Two ways to run it

| Agent | What it can do | When |
| --- | --- | --- |
| Main agent | Search the web | In chat, to answer a question about the project |
| Sub-agents | Search the web | Row by row, to fill a researched column |

## Limits

- **No browser session.** MAIA reads pages. It does not click, fill in forms, or step through a site.
- **No logins and no paywalls.** MAIA reads public pages only.
- **Some pages cannot be read.** A page MAIA cannot open is not a source.
- **Research is bounded.** Each row gets a fixed amount of research. A question that needs a day of digging will come back thin.
- **A PDF attached to chat is context, not research.** Where PDF attachments are turned on, MAIA reads the file as context for the conversation. It adds no rows. See [File formats](https://maia-analytics.com/docs/reference/file-formats).

## In the app and over MCP

| Where | How |
| --- | --- |
| The web app | Ask in chat, or choose **Add enrichment** above the table |
| MCP | Ask in the `request` of `create_project`, or in a `send_message` |

## Related

- [Sub-agents](https://maia-analytics.com/docs/capabilities/sub-agents) explains what a web sub-agent can use and how its answers are judged.
- [Data discovery](https://maia-analytics.com/docs/capabilities/data-discovery) finds public GIS layers, which MAIA tries before it researches.
- [Review](https://maia-analytics.com/docs/using-maia/review) explains how to check a source.
