---
title: "Page Two Quick Wins"
method: POST
path: "/quick-wins"
---

# Page Two Quick Wins

`POST /quick-wins`

## Request

- Base URL: `https://seoscoreapi.com` (the document declares no server; this is the origin it was published from)
- URL: `https://seoscoreapi.com/quick-wins`
- Auth: none declared. Required headers: `X-API-Key`

Find the page-2 quick wins in your Search Console data.

Send your own Search Console rows and get back the queries ranking 11-20 that are
worth working on first, each with the page it lands on, an opportunity score and an
estimate of the extra clicks from moving it onto page 1.

**We do not connect to your Search Console.** You export the rows (Performance
report CSV, or the Search Analytics API with the `query` and `page` dimensions)
and send them. Nothing is fetched and nothing is stored.

Send JSON with either `rows` or `csv`:

- `rows`: `[{"query": "...", "page": "https://...", "clicks": 3, "impressions": 900, "position": 11.4}]`.
  The API's own shape (`{"keys": ["query", "page"], "clicks": ...}`) works too. `page` is optional.
- `csv`: the export as text, with a header row. Column names are matched
  (`Top queries`/`Query`, `Page`, `Clicks`, `Impressions`, `Position`).
- `min_impressions` (default 50), `target_position` (1-10, default 5), `limit` (default 25, max 200)
- `exclude_terms`: words to leave out, such as your brand name
- `ctr_curve`: your own expected click-through rate by position, `{"1": 0.28, "2": 0.15}`

Each item in `quick_wins` has `query`, `page`, `position`, `impressions`, `clicks`,
`ctr`, `expected_ctr`, `opportunity_score` (0-100: 40% how close to page 1, 40%
impressions, 20% how far clicks fall short of expected), `estimated_extra_clicks`
at the target position with a range (position 10 to position 3), an `action`
(`small_push`, `improve_page`, `fix_snippet`, `consolidate`) and a `plain_english`
sentence. `also_ranking_pages` lists other pages of yours showing for the same query.
`pages` groups the wins by landing page.

**Read the numbers as estimates.** Google publishes no click-through curve; the
default is a rough one. Extra clicks hold impressions constant and assume every
impression is a person. Position is an average over the export's dates, countries
and devices.

**Send the whole export, not only page 2.** With 500 or more page-1 impressions in
the rows, `ctr_calibration` compares the clicks your page-1 results earned with
what the curve predicts (`ratio`), and each win also gets
`estimated_extra_clicks_calibrated` (the estimate times that ratio). A ratio far
below 1 usually means many of the impressions are rank trackers or bots.

Works on every plan. Counts as one audit; a request we reject (400) is not counted.
Up to 1 MB of JSON per request (roughly 5,000 rows with URLs); filter the export
to positions 11-20 first if yours is larger.

## Headers

- `X-API-Key` string, required: Your API key from /signup

## Request body

- object
  - `rows` object[]: Search Console rows: query, page (optional), clicks, impressions, position.
  - `csv` string: The Performance export as text, with its header row. Send rows or csv.
  - `min_impressions` integer
  - `target_position` integer
  - `limit` integer
  - `exclude_terms` string[]
  - `ctr_curve` object: Expected click-through rate by position.

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/seoscoreapi/apis/seo-score-api.md) · [All operations](https://skmtc.dev/seoscoreapi/apis/seo-score-api/llms.txt) · [OpenAPI document](https://skmtc.dev/seoscoreapi/apis/seo-score-api/revisions/877a3044b5be?raw)
