# Read the results of a crawl

> Issues, pages and reports of a crawl, and the comparison with the previous one.

## The issue summary

```bash
curl "https://api.nessflow.com/v1/crawls/$CRAWL_ID/issues/summary" \
  -H "Authorization: Bearer $NESSFLOW_TOKEN"
```

The summary returns issue families with their number of occurrences and the totals by severity. Findings that describe a firewall or interstitial page, rather than the site, leave every total; their number is returned separately (`protection_occurrences`).

## Occurrences, filtered

One line per issue and per URL, filterable by severity, category or name:

```bash
curl "https://api.nessflow.com/v1/crawls/$CRAWL_ID/issues?severity=error&limit=50" \
  -H "Authorization: Bearer $NESSFLOW_TOKEN"
```

## Pages

The list of crawled pages, or one page by its URL:

```bash
curl "https://api.nessflow.com/v1/crawls/$CRAWL_ID/pages/by-url?url=https%3A%2F%2Fexemple.fr%2F" \
  -H "Authorization: Bearer $NESSFLOW_TOKEN"
```

## Reports

Each crawl carries frozen reports: `pagespeed`, `geo`, `accessibility`, `eeat` and `structure`. Each declares its `status` (`ready`, `pending` or `unavailable`) and the scoring version that produced it:

```bash
curl "https://api.nessflow.com/v1/crawls/$CRAWL_ID/geo" \
  -H "Authorization: Bearer $NESSFLOW_TOKEN"
```

A missing report is never returned as zeros: `score: null` means "not measured".

## Compare with the previous crawl

```bash
curl "https://api.nessflow.com/v1/crawls/$CRAWL_ID/compare" \
  -H "Authorization: Bearer $NESSFLOW_TOKEN"
```

Without a parameter, the baseline is the previous comparable crawl of the same project. A truncated crawl never is one: when no baseline exists, the API answers `404 crawl.no_baseline`.
