Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/socialcrawl-google-play-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: SocialCrawl Google Play API
version: 1.0.0
description: 'Unified social media data API - one API key, one consistent response format, 50 platforms, 400 endpoints. Power AI agents with clean social data.
Slim variant: inline examples removed and the shared error responses hoisted into components. The full annotated spec is at https://www.socialcrawl.dev/openapi.json.'
contact:
name: SocialCrawl
url: https://www.socialcrawl.dev
email: support@socialcrawl.dev
servers:
- url: https://www.socialcrawl.dev/v1
description: Production
security:
- ApiKeyAuth: []
tags:
- name: google_play
description: Google_play endpoints
paths:
/google_play/app-search:
get:
summary: Search Google Play apps by keyword
description: 'Returns a unified AppList of Google Play apps matching a keyword: title, icon, developer, rating, price/is_free, and store URL on every item, on the same canonical `App` shape used across every app marketplace (`app.store` = "google_play"). Detail-only fields (description, screenshots, installs) are null on search items; fetch /v1/google_play/app-info for the full record. Sourced from DataForSEO''s task-based App Data API (first calls ~7-15s, then cached).'
tags:
- google_play
operationId: get_google_play_app_search
security:
- ApiKeyAuth: []
x-credit-tier: advanced
x-credit-cost: 5
parameters:
- name: query
in: query
required: true
description: Search keyword (e.g. 'photo editor').
schema:
type: string
- name: country
in: query
required: false
description: Storefront country as an ISO code ('US'), a full name ('United States'), or a numeric location code ('2840'). Defaults to the US.
schema:
type: string
- name: language
in: query
required: false
description: Language code (e.g. 'en'). Defaults to 'en'.
schema:
type: string
- name: depth
in: query
required: false
description: 'Number of results to retrieve (default 30, rounded up to multiples of 30, max 300). Note: Google Play''s organic keyword search typically exposes only ~30 ranked results, so higher depth values rarely return more. To page deeper for app discovery, use /v1/google_play/app-listings-search (a filterable title/description database with real limit/offset/total).'
schema:
type: integer
- name: Cache-Control
in: header
required: false
description: Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.
schema:
type: string
- name: Idempotency-Key
in: header
required: false
description: 'Optional UUID that makes the request safely retriable. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Scoped per account with a 24-hour TTL.'
schema:
type: string
responses:
'200':
description: Successful response
headers:
X-Credits-Used:
description: Net credits charged for this response. Idempotency replays report 0.
schema:
type: integer
minimum: 0
X-Credits-Remaining:
description: Current balance when known. On an idempotency replay, this header is omitted when the balance lookup fails; body `credits_remaining` is null instead.
schema:
type: integer
minimum: 0
X-Idempotent-Replay:
description: Present with value `true` only when this response replays a settled idempotency record.
schema:
type: string
enum:
- 'true'
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request succeeded
platform:
type: string
description: Platform name
endpoint:
type: string
description: API endpoint path
data:
type: object
description: Platform-specific response data
properties:
items:
type: array
description: Array of canonical app wrappers ({ app })
items:
type: object
description: Canonical app wrapper
properties:
app:
type: object
description: Canonical App object (unified across app marketplaces)
properties:
id:
type: string
description: Store app ID (Google Play package name / App Store numeric id)
store:
type: string
description: App marketplace ("google_play" or "app_store")
url:
type:
- string
- 'null'
description: String at app.url
title:
type:
- string
- 'null'
description: App title
icon:
type:
- string
- 'null'
description: String at app.icon
description:
type:
- string
- 'null'
description: String at app.description
developer:
type: object
description: Developer block (name, id, url; email/address for Google)
properties:
id:
type:
- string
- 'null'
description: String at app.developer.id
name:
type:
- string
- 'null'
description: String at app.developer.name
url:
type:
- string
- 'null'
description: String at app.developer.url
email:
type:
- string
- 'null'
description: String at app.developer.email
address:
type:
- string
- 'null'
description: String at app.developer.address
website:
type:
- string
- 'null'
description: String at app.developer.website
rating:
type: object
description: Aggregate rating (value, max, number of ratings)
properties:
value:
type:
- integer
- 'null'
description: Numeric at app.rating.value
max:
type:
- integer
- 'null'
description: Numeric at app.rating.max
count:
type:
- integer
- 'null'
description: Numeric at app.rating.count
price:
type: object
description: Price block (current, original, currency, is_free, displayed)
properties:
current:
type:
- integer
- 'null'
description: Numeric at app.price.current
original:
type:
- integer
- 'null'
description: Numeric at app.price.original
currency:
type:
- string
- 'null'
description: String at app.price.currency
is_free:
type:
- boolean
- 'null'
description: Boolean at app.price.is_free
displayed:
type:
- string
- 'null'
description: String at app.price.displayed
reviews_count:
type:
- integer
- 'null'
description: Numeric at app.reviews_count
category:
type:
- string
- 'null'
description: String at app.category
categories:
type:
- array
- 'null'
description: Array at app.categories
items:
type: string
description: String at app.categories
installs:
type:
- object
- 'null'
description: 'Install signal (Google only): { display "1,000,000,000+", count }; null on Apple'
properties:
display:
type:
- string
- 'null'
description: String at app.installs.display
count:
type:
- integer
- 'null'
description: Numeric at app.installs.count
version:
type:
- string
- 'null'
description: String at app.version
minimum_os_version:
type:
- string
- 'null'
description: String at app.minimum_os_version
size:
type:
- string
- 'null'
description: String at app.size
released_at:
type:
- string
- integer
- 'null'
description: 'Union: string | integer | null'
updated_at:
type:
- string
- integer
- 'null'
description: 'Union: string | integer | null'
update_notes:
type:
- string
- 'null'
description: String at app.update_notes
image_urls:
type:
- array
- 'null'
description: Screenshot URLs
items:
type: string
description: Screenshot URLs
video_urls:
type:
- array
- 'null'
description: Array at app.video_urls
items:
type: string
description: String at app.video_urls
languages:
type:
- array
- 'null'
description: Array at app.languages
items:
type: string
description: String at app.languages
advisories:
type:
- array
- 'null'
description: Apple age/content advisories (null on Google)
items:
type: string
description: Apple age/content advisories (null on Google)
genres:
type:
- array
- 'null'
description: Google Play genres (null on Apple)
items:
type: string
description: Google Play genres (null on Apple)
tags:
type:
- array
- 'null'
description: Array at app.tags
items:
type: string
description: String at app.tags
similar_apps:
type:
- array
- 'null'
description: Array at app.similar_apps
items:
type: object
description: 'Nested object: app.similar_apps'
properties:
id:
type:
- string
- 'null'
description: String at app.similar_apps.id
title:
type:
- string
- 'null'
description: String at app.similar_apps.title
url:
type:
- string
- 'null'
description: String at app.similar_apps.url
more_by_developer:
type:
- array
- 'null'
description: Array at app.more_by_developer
items:
type: object
description: 'Nested object: app.more_by_developer'
properties:
id:
type:
- string
- 'null'
description: String at app.more_by_developer.id
title:
type:
- string
- 'null'
description: String at app.more_by_developer.title
url:
type:
- string
- 'null'
description: String at app.more_by_developer.url
ext:
type:
- object
- 'null'
description: 'Nested object: app.ext'
properties:
appdata:
type:
- string
- 'null'
description: Leaf at app.ext.appdata
next_cursor:
type:
- string
- 'null'
description: Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results.
total:
type:
- integer
- 'null'
description: Total number of matching results, when the upstream provides a count. Omitted otherwise.
dropped:
type: integer
description: Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.
_warnings:
type: array
description: 'Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as ''no warnings''.'
items:
type: string
description: One advisory notice.
required:
- dropped
credits_used:
type: integer
description: Number of credits consumed
credits_remaining:
type:
- integer
- 'null'
description: Current account balance. Null only when an idempotency replay succeeds but its transient balance lookup fails.
request_id:
type: string
description: Unique request identifier for support
cached:
type: boolean
description: Whether the response was served from cache
idempotent_replay:
type: boolean
description: True only when this response is an idempotency replay
pagination:
type: object
description: Cursor state for this page. Present on every list response.
properties:
next_cursor:
type:
- string
- 'null'
description: Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.
has_more:
type: boolean
description: Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.
page_size:
type: integer
description: Number of items in THIS page.
required:
- next_cursor
- has_more
- page_size
required:
- success
- platform
- endpoint
- data
- credits_used
- credits_remaining
- request_id
- cached
- pagination
'400':
$ref: '#/components/responses/Error400'
'401':
$ref: '#/components/responses/Error401'
'402':
$ref: '#/components/responses/Error402'
'404':
$ref: '#/components/responses/Error404'
'405':
$ref: '#/components/responses/Error405'
'409':
$ref: '#/components/responses/Error409'
'413':
$ref: '#/components/responses/Error413'
'422':
$ref: '#/components/responses/Error422'
'429':
$ref: '#/components/responses/Error429'
'500':
$ref: '#/components/responses/Error500'
'502':
$ref: '#/components/responses/Error502'
'503':
$ref: '#/components/responses/Error503'
/google_play/search-suggestions:
get:
summary: Get Google Play search suggestions
description: 'Returns Google Play''s search autocomplete suggestions for a keyword stem: the same terms the store''s search box surfaces. The day Play starts autocompleting a phrase, real demand exists; poll a stem daily and diff to catch rising app keywords early. Each item is `{ term, priority }` ranked by Play''s own order (Play exposes no numeric score). Returns a list under `items`.'
tags:
- google_play
operationId: get_google_play_search_suggestions
security:
- ApiKeyAuth: []
x-credit-tier: standard
x-credit-cost: 1
parameters:
- name: query
in: query
required: true
description: Partial search keyword to autocomplete (e.g. 'reverse').
schema:
type: string
- name: country
in: query
required: false
description: ISO 3166-1 alpha-2 storefront country code. Defaults to 'us'.
schema:
type: string
- name: language
in: query
required: false
description: ISO 639-1 language code. Defaults to 'en'.
schema:
type: string
- name: Cache-Control
in: header
required: false
description: Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.
schema:
type: string
- name: Idempotency-Key
in: header
required: false
description: 'Optional UUID that makes the request safely retriable. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Scoped per account with a 24-hour TTL.'
schema:
type: string
responses:
'200':
description: Successful response
headers:
X-Credits-Used:
description: Net credits charged for this response. Idempotency replays report 0.
schema:
type: integer
minimum: 0
X-Credits-Remaining:
description: Current balance when known. On an idempotency replay, this header is omitted when the balance lookup fails; body `credits_remaining` is null instead.
schema:
type: integer
minimum: 0
X-Idempotent-Replay:
description: Present with value `true` only when this response replays a settled idempotency record.
schema:
type: string
enum:
- 'true'
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request succeeded
platform:
type: string
description: Platform name
endpoint:
type: string
description: API endpoint path
data:
type: object
description: Platform-specific response data
properties:
items:
type: array
description: Array of search result objects
items:
type: object
description: Search result item
next_cursor:
type:
- string
- 'null'
description: Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results.
total:
type:
- integer
- 'null'
description: Total number of matching results, when the upstream provides a count. Omitted otherwise.
dropped:
type: integer
description: Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.
_warnings:
type: array
description: 'Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as ''no warnings''.'
items:
type: string
description: One advisory notice.
required:
- dropped
credits_used:
type: integer
description: Number of credits consumed
credits_remaining:
type:
- integer
- 'null'
description: Current account balance. Null only when an idempotency replay succeeds but its transient balance lookup fails.
request_id:
type: string
description: Unique request identifier for support
cached:
type: boolean
description: Whether the response was served from cache
idempotent_replay:
type: boolean
description: True only when this response is an idempotency replay
pagination:
type: object
description: Cursor state for this page. Present on every list response.
properties:
next_cursor:
type:
- string
- 'null'
description: Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.
has_more:
type: boolean
description: Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.
page_size:
type: integer
description: Number of items in THIS page.
required:
- next_cursor
- has_more
- page_size
required:
- success
- platform
- endpoint
- data
- credits_used
- credits_remaining
- request_id
- cached
- pagination
'400':
$ref: '#/components/responses/Error400'
'401':
$ref: '#/components/responses/Error401'
'402':
$ref: '#/components/responses/Error402'
'404':
$ref: '#/components/responses/Error404'
'405':
$ref: '#/components/responses/Error405'
'409':
$ref: '#/components/responses/Error409'
'413':
$ref: '#/components/responses/Error413'
'422':
$ref: '#/components/responses/Error422'
'429':
$ref: '#/components/responses/Error429'
'500':
$ref: '#/components/responses/Error500'
'502':
$ref: '#/components/responses/Error502'
'503':
$ref: '#/components/responses/Error503'
/google_play/app-info:
get:
summary: Get full Google Play app details
description: 'Returns the full canonical `App` record for one Google Play app keyed by its package name (`app_id`): title, description, developer block (incl. email/address/website), rating, price, install count + display (''1,000,000,000+''), version, size, screenshots, genres, chart ta
# --- truncated at 32 KB (141 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/socialcrawl/refs/heads/main/openapi/socialcrawl-google-play-api-openapi.yml