> For the complete documentation index, see [llms.txt](https://mads.avelino.run/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mads.avelino.run/guides/review-and-import.md).

# Review and import

This page shows how to read `report.md`, check the CSVs and upload them to Google Ads without surprises.

## Read report.md first

The report is in the run directory next to `google-ads/`. It always has these sections, in this order.

### Header and status

The first line is the business name. The second line is the run id, the date, the provider and the model. A status line follows, one of three.

| Status line                                                                                        | Exit code | What it means                                               |
| -------------------------------------------------------------------------------------------------- | --------- | ----------------------------------------------------------- |
| `Ready to import. Review the files in google-ads/ before uploading.`                               | 0         | Files written.                                              |
| `Not exported: the account has errors. Fix them and run mads export <run-dir>, or generate again.` | 3         | Validation or URL check failed. No CSV written by this run. |
| `Incomplete: some missions failed. Run mads generate --resume <run-dir> to retry only those.`      | 1         | At least one mission failed.                                |

### Summary

One row per campaign with intent, daily budget, bidding, ad group count and keyword count. Check that the split matches what you want and that the totals match your `budget.daily`.

The daily budget prints with two decimals (`10,00 BRL`), while the CSV prints `10`.

### Budget and bids

The agent's rationale for each campaign, and the CPC of each ad group with its reason. The section says the numbers are estimates. mads has no auction data. Compare each CPC with the Keyword Planner and your own history.

### Validation

Errors and warnings grouped by code with a count and up to 5 examples each. More show as `and N more`. Each example has the path into the account, for example `campaigns[1].ad_groups[0].rsa.headlines[0]`. The first index is the campaign in plan order. Cross-negative notes appear under Notes.

```markdown
**W04 (1)**

- `campaigns[0].ad_groups[0].rsa`: merged ad has 14 headlines and 4 descriptions (15 and 4 recommended)
```

Warnings never block the export. Read them anyway. See [Validation rules](/reference/validation-rules.md) for every code.

### URL check

One row per distinct final URL and sitelink URL with the HTTP status after redirects. With `--skip-url-check` the section says `skipped`. A skipped check means mads did not verify that your pages load.

### Usage

Attempts, input tokens, output tokens, cost and result for each mission, then totals. A failed mission shows its reason, such as `failed: max turns`. Cost is `n/a` for API providers.

### How to import

A short list of the upload steps. The next section expands it.

## Review the CSVs

Open the files in `google-ads/`. Check the things the validator cannot judge.

* **Claims.** Does every headline come from facts you gave? mads blocks `avoid` terms and `!`. It does not fact-check.
* **Tone and language.** Read the ads in your language.
* **Trademarks.** Look at every `W01`. Decide per name.
* **Negatives.** Do any block searches you want? mads checks only against your own keywords.
* **Landing pages.** Each ad group's final URL (last column of file 5) fits its keywords.

You can edit the CSVs by hand before uploading. If you change many things, change the input and generate again.

## Upload in Google Ads

1. Open Google Ads and go to Tools, Bulk actions, Uploads.
2. Upload the files in numeric order, one at a time. Rows reference their parents by name, so the campaign file goes first.
3. For each file, look at the preview. Google lists what it will add and flags rows it cannot accept.
4. Fix anything flagged, then apply.

The order is `1-campaign.csv`, `2-ad-groups.csv`, `3-keywords.csv`, `4-negative-keywords.csv`, `5-responsive-search-ads.csv`.

The files use CRLF line endings, UTF-8 without a BOM, and comma decimals for `pt`, `es`, `fr`, `de` and `it`. If your Google Ads account uses a different number format, set `export.decimal_comma` in `business.toml` and generate again, or edit `input.export` in `workspace.json` and run `mads export`. See [the bulk upload format](/how-to/google-ads-bulk-upload-format.md).

## Paused by default

`export.status` defaults to `Paused`. Campaigns arrive paused, and nothing serves until you enable them. The ad groups, keywords and ads are `Enabled` inside the paused campaign.

Keep `Paused` for your first runs. Open the campaigns, check settings and enable one at a time.

The last import step in the report follows `export.status`. With `Enabled` it says "Campaigns arrive enabled. They start serving as soon as Google approves the ads."

## Not in the files yet

Sitelinks, callouts and structured snippets are validated but not exported. Add them in the Google Ads interface until the asset templates are verified.

Performance Max and Demand Gen campaigns are not in files 1 to 5. They are in `google-ads/editor/image-campaigns.csv` with their pictures, and you import them with Google Ads Editor. See [Image campaigns](/guides/image-campaigns.md#import).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://mads.avelino.run/guides/review-and-import.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
