---
title: "Your Search Console properties and selection"
method: GET
path: "/v1/gsc/properties"
tags: ["Search Console"]
---

# Your Search Console properties and selection

`GET /v1/gsc/properties`

## Request

- Base URL: `https://api.placementapi.com`
- URL: `https://api.placementapi.com/v1/gsc/properties`
- Auth: HTTP bearer

The properties your Google connection can see, with your selection and each property's pull state. Read-only unless `refresh=1`, which re-asks Google for the current property list. `pull_state` is additive: `queued`/`running` mean an immediate first pull is in progress, `done` means the requested window was processed under Google's existing row caps (not a complete Google total), `failed` is a terminal permission/revocation outcome, and null means the property is unselected or has never been requested. A property pulled before the first-pull queue existed derives `done` from `pulled_through` when it has no queue state of its own. Read with a customer key (`read` scope) or a dashboard session; property names are private, so every response is `private, no-store` and private property URLs are never logged. Every row is scoped to your account.

## Query parameters

- `refresh` '1'

## Response `200`

OK

- object
  - `properties` object[]
    - `property` string, required: Exactly as Google names it: `sc-domain:example.com` or `https://www.example.com/`.
    - `permission_level` string, nullable, required: siteOwner | siteFullUser | siteRestrictedUser | siteUnverifiedUser, or null.
    - `selected` boolean, required: Whether the nightly pull keeps this property current.
    - `pulled_through` string, date, nullable, required: Last day actually pulled, or null.
    - `last_pull_at` string, date-time, nullable, required: Most recent pull attempt, which may have failed; null if never.
    - `last_error` string, nullable, required: Error from the most recent attempt, or null. Immediate first pulls use short error codes.
    - `pull_state` 'queued' | 'running' | 'done' | 'failed' | 'null', nullable, required: Additive immediate-first-pull state. `queued`/`running`: an immediate import is pending or in progress. `done`: the requested window was processed under Google's existing row caps — not a complete Google total. `failed`: terminal permission/revocation outcome. null: unselected or never requested. A property pulled before the queue existed derives `done` from `pulled_through` when it has no queue state of its own.
  - `selected` string[]: The selected property names, in the same order as `properties`.
  - `next` string: A short hint about what happens next; wording is not part of the contract.

## Other responses

- `401`: Missing, malformed or revoked Bearer credential: `{ error: "unauthorized" }`.
- `403`: `insufficient_scope` when the key lacks the `read` scope.
- `404`: `not_connected`: no Google connection for this account.
- `503`: `server_misconfigured`, or `gsc_not_configured` when `refresh=1` and the Google client is not configured.

---

[API](https://skmtc.dev/placementapi/apis/placement-api.md) · [All operations](https://skmtc.dev/placementapi/apis/placement-api/llms.txt) · [OpenAPI document](https://skmtc.dev/placementapi/apis/placement-api/revisions/fc4e7866eaf7?raw)
