# Crawl data

Retrieve Screpy crawl pages, links, images, on-page findings, and Quick Wins through the REST API.

## Read one completed crawl at a time

Choose the data endpoint that answers the decision you are making: use overview data for a broad status check, then pages, links, images, on-page findings, or Quick Wins for the underlying work. Select the completed crawl first through crawls.

Always keep the project and crawl scope together. Paginate through large result sets and do not combine rows from different crawls when reporting a single audit result. Use comparisons when the question is about change between baselines.

## Get on-page audit overview
GET`/projects/{project_uid}/crawls/{crawl_uid}/on-page-overview`

### Authorization
`bearerApiKey`

AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

### Path Parameters
- **project_uid** *string* 
  Accessible project UID. Discover it with `GET /projects`; do not guess it.

- **crawl_uid** *string* 
  Crawl UID belonging to the selected project. Discover it with `GET /projects/{project_uid}/crawls`.

### Response Body
### 200  `application/json`
```json
{
  "data": {
    "summary": {
      "status": "string",
      "finished_at": "2019-08-24T14:15:22Z",
      "health_score": 0,
      "health_score_version": 0,
      "health_score_confidence": 0,
      "health_score_coverage": 0,
      "health_score_groups": [null],
      "health_score_delta": 0,
      "pages_total": 0,
      "critical_issues": 0,
      "warnings": 0,
      "notices": 0,
      "issues_total": 0,
      "avg_response_time_ms": 0,
      "duration_seconds": 0,
      "broken_links": 0,
      "total_images_count": 0,
      "missing_metadata": 0,
      "issues_added": 0,
      "issues_fixed": 0
    },
    "trends": [null],
    "groups": [null],
    "coverage": [null]
  }
}
```

## List prioritized search-performance opportunities
GET`/projects/{project_uid}/crawls/{crawl_uid}/quick-wins`

### Authorization
`bearerApiKey`

AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

### Path Parameters
- **project_uid** *string* 
  Accessible project UID. Discover it with `GET /projects`; do not guess it.

- **crawl_uid** *string* 
  Crawl UID belonging to the selected project. Discover it with `GET /projects/{project_uid}/crawls`.

### Query Parameters
- **type?string** 
  Value in: "strikingDistancePages", "ctrOpportunities", "newContentOpportunities", "secondPageKeywords", "lostQueries", "risingQueries", "fallingQueries", "risingPages", "fallingPages"

- **range?string** 
  Values: "7d", "28d", "3m", "6m"

- **limit?integer** 
  Maximum records to return. Defaults to 50.

### Response Body
### 200  `application/json`
```json
{
  "data": [{}],
  "links": {
    "next": "http://example.com"
  },
  "meta": {
    "next_cursor": "string",
    "range": "7d",
    "warnings": ["string"]
  }
}
```

## List crawled pages
GET`/projects/{project_uid}/crawls/{crawl_uid}/pages`

### Authorization
`bearerApiKey`

AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

### Path Parameters
- **project_uid** *string* 
  Accessible project UID. Discover it with `GET /projects`; do not guess it.

- **crawl_uid** *string* 
  Crawl UID belonging to the selected project. Discover it with `GET /projects/{project_uid}/crawls`.

### Query Parameters
- **filters?object** 
  Up to 20 indexed PHP-style filter objects.

- **limit?integer** 
  Maximum records to return. Defaults to 50.

### Response Body
### 200  `application/json`
```json
{
  "data": [{
    "url": "http://example.com",
    "final_url": "http://example.com",
    "domain": "string",
    "status_code": 0,
    "content_type": "string",
    "title": "string",
    "title_length": 0,
    "description": "string",
    "description_length": 0,
    "h1": "string",
    "h1_count": 0,
    "h2_count": 0,
    "words_count": 0,
    "content_ratio": 0,
    "depth": 0,
    "response_time_ms": 0,
    "response_bytes": 0,
    "canonical": "string",
    "canonical_present": true,
    "canonical_matches_final_url": true,
    "json_ld_count": 0,
    "og_required_tags_present": true,
    "twitter_card_present": true,
    "total_links_count": 0,
    "external_links_count": 0,
    "internal_links_count": 0,
    "total_images_count": 0,
    "missing_alt_images_count": 0,
    "fetched_at": "2019-08-24T14:15:22Z"
  }],
  "links": {
    "next": "http://example.com"
  },
  "meta": {
    "limit": 0,
    "next_cursor": "string"
  }
}
```

## Get one page by its crawled URL
GET`/projects/{project_uid}/crawls/{crawl_uid}/pages/detail`

### Authorization
`bearerApiKey`

AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

### Path Parameters
- **project_uid** *string* 
  Accessible project UID. Discover it with `GET /projects`; do not guess it.

- **crawl_uid** *string* 
  Crawl UID belonging to the selected project. Discover it with `GET /projects/{project_uid}/crawls`.

### Query Parameters
- **url** *string* 
  Exact crawled HTTP or HTTPS page URL.

### Response Body
### 200  `application/json`
```json
{
  "data": {
    "url": "http://example.com",
    "final_url": "http://example.com",
    "domain": "string",
    "status_code": 0,
    "content_type": "string",
    "title": "string",
    "title_length": 0,
    "description": "string",
    "description_length": 0,
    "h1": "string",
    "h1_count": 0,
    "h2_count": 0,
    "words_count": 0,
    "content_ratio": 0,
    "depth": 0,
    "response_time_ms": 0,
    "response_bytes": 0,
    "canonical": "string",
    "canonical_present": true,
    "canonical_matches_final_url": true,
    "json_ld_count": 0,
    "og_required_tags_present": true,
    "twitter_card_present": true,
    "total_links_count": 0,
    "external_links_count": 0,
    "internal_links_count": 0,
    "total_images_count": 0,
    "missing_alt_images_count": 0,
    "fetched_at": "2019-08-24T14:15:22Z"
  }
}
```

## List unique link destinations
GET`/projects/{project_uid}/crawls/{crawl_uid}/links`

### Authorization
`bearerApiKey`

AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

### Path Parameters
- **project_uid** *string* 
  Accessible project UID. Discover it with `GET /projects`; do not guess it.

- **crawl_uid** *string* 
  Crawl UID belonging to the selected project. Discover it with `GET /projects/{project_uid}/crawls`.

### Query Parameters
- **filters?object** 
  Up to 20 indexed PHP-style filter objects.

- **limit?integer** 
  Maximum records to return. Defaults to 50.

### Response Body
### 200  `application/json`
```json
{
  "data": [{
    "destination_url": "string",
    "target_domain": "string",
    "is_external": true,
    "link_count": 0,
    "source_pages": 0,
    "broken_link_count": 0,
    "nofollow_link_count": 0
  }],
  "links": {
    "next": "http://example.com"
  },
  "meta": {
    "limit": 0,
    "next_cursor": "string"
  }
}
```

## List pages linking to a destination URL
GET`/projects/{project_uid}/crawls/{crawl_uid}/links/sources`

### Authorization
`bearerApiKey`

AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

### Path Parameters
- **project_uid** *string* 
  Accessible project UID. Discover it with `GET /projects`; do not guess it.

- **crawl_uid** *string* 
  Crawl UID belonging to the selected project. Discover it with `GET /projects/{project_uid}/crawls`.

### Query Parameters
- **destination_url** *string* 
  Exact HTTP or HTTPS destination URL.

- **limit?integer** 
  Maximum records to return. Defaults to 50.

### Response Body
### 200  `application/json`
```json
{
  "data": [{
    "source_url": "string",
    "source_status_code": 0,
    "anchor_text": "string",
    "fetch_status_code": 0,
    "is_nofollow": true,
    "target_blank": true
  }],
  "links": {
    "next": "http://example.com"
  },
  "meta": {
    "limit": 0,
    "next_cursor": "string"
  }
}
```

## List unique images
GET`/projects/{project_uid}/crawls/{crawl_uid}/images`

### Authorization
`bearerApiKey`

AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

### Path Parameters
- **project_uid** *string* 
  Accessible project UID. Discover it with `GET /projects`; do not guess it.

- **crawl_uid** *string* 
  Crawl UID belonging to the selected project. Discover it with `GET /projects/{project_uid}/crawls`.

### Query Parameters
- **filters?object** 
  Up to 20 indexed PHP-style filter objects.

- **limit?integer** 
  Maximum records to return. Defaults to 50.

### Response Body
### 200  `application/json`
```json
{
  "data": [{
    "image_url": "string",
    "alt": "string",
    "width": 0,
    "height": 0,
    "fetch_status_code": 0,
    "is_external": true,
    "is_data_uri": true,
    "is_svg": true,
    "has_srcset": true,
    "source_pages": 0
  }],
  "links": {
    "next": "http://example.com"
  },
  "meta": {
    "limit": 0,
    "next_cursor": "string"
  }
}
```

## List pages referencing an image URL
GET`/projects/{project_uid}/crawls/{crawl_uid}/images/sources`

### Authorization
`bearerApiKey`

AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

### Path Parameters
- **project_uid** *string* 
  Accessible project UID. Discover it with `GET /projects`; do not guess it.

- **crawl_uid** *string* 
  Crawl UID belonging to the selected project. Discover it with `GET /projects/{project_uid}/crawls`.

### Query Parameters
- **image_url** *string* 
  Exact HTTP or HTTPS image URL.

- **limit?integer** 
  Maximum records to return. Defaults to 50.

### Response Body
### 200  `application/json`
```json
{
  "data": [{
    "source_url": "string",
    "source_status_code": 0,
    "alt": "string",
    "width": 0,
    "height": 0,
    "fetch_status_code": 0
  }],
  "links": {
    "next": "http://example.com"
  },
  "meta": {
    "limit": 0,
    "next_cursor": "string"
  }
}
```
