AppstoreSpy Jobs API
The Jobs API from AppstoreSpy — 1 operation(s) for jobs.
The Jobs API from AppstoreSpy — 1 operation(s) for jobs.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/appstorespy:appstorespy-jobs-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: AppstoreSpy Jobs API
description: '# Authentication
The Appstorespy API uses API-KEY authentication.
If you do not have an API Key token, you can get it on your account page https://appstorespy.com/account.
An API Key is required to be sent as part of every request in request header.
```
-H ''accept: application/json''
-H ''API-KEY: ''
```
# Agents and MCP
AI agents can call the same endpoints as MCP tools at https://api.appstorespy.com/mcp, with the same API-KEY header and the same credits per call.
https://api.appstorespy.com/agentic-access lists what each operation costs and whether it reads, queues or writes; https://api.appstorespy.com/skills/ holds one agent skill per capability; https://api.appstorespy.com/llms.txt links every agent document.
# Fields
Use the fields parameter to specify which fields should be returned.
Example:
```
Request: fields=name,developer_name,ipd,downloads,...
Response: {name: ..., developer_name: ..., ipd: ..., downloads: ..., ...}
```
Don`t use fields parameter if you need to get all fields.
# Sort
When you use search, you can add a sort parameter.
```
Request: sort=ratingCount
Response: [{name: app1, ratingCount: 4.2}, {name: app2, ratingCount: 4.4}, ...]
```
If you need DESC sorting add "-" before sort parametr.
```
Request: sort=-ratingCount
Response: [{name: app2, ratingCount: 4.4}, {name: app1, ratingCount: 4.2}, ...]
```
# County & Language params
...
# Status codes / Error codes
* 200 OK.
* 202 Accepted - The app was not present in our databases and has been submitted for crawling. If the app is available anywhere, it will be available soon.
* 204 No Content - No data for requested country.
* 403 Forbidden - Your access token is not valid.
* 429 Too Many Requests - Your request rate is over the limit.'
termsOfService: https://appstorespy.com/agreement
contact:
name: AppstoreSpy Support
url: https://appstorespy.com/support
email: support@appstorespy.com
license:
name: Proprietary
url: https://appstorespy.com/agreement
version: 1.1.1
tags:
- name: Jobs
description: 'Asynchronous keyword crawl jobs: submit a term for a store and country, then poll for the results.'
externalDocs:
description: Quickstart examples
url: https://github.com/romamo/appstorespy-api-docs
paths:
/jobs/search:
get:
tags:
- Jobs
summary: List keyword crawl jobs
description: Lists the keyword crawl jobs you have submitted, filtered by store, term, country or last-updated window. Each result carries the job's current state and, once finished, its results.
operationId: get_search_jobs_search_get
parameters:
- required: false
schema:
$ref: '#/components/schemas/Store'
name: store
in: query
- required: false
schema:
type: string
title: Term
name: term
in: query
- required: false
schema:
type: string
title: Id User
name: id_user
in: query
- required: false
schema:
type: string
title: Country
name: country
in: query
- required: false
schema:
type: string
title: Search Id
name: search_id
in: query
- required: false
schema:
type: string
format: date-time
title: Updated Gte
example: '2020-01-01T00:00:00+00:00'
name: updated_gte
in: query
- required: false
schema:
type: string
format: date-time
title: Updated Lte
example: '2022-01-01T00:00:00+00:00'
name: updated_lte
in: query
responses:
'200':
description: Successful Response
content:
application/json:
schema:
items:
$ref: '#/components/schemas/SearchResult'
type: array
title: Response Get Search Jobs Search Get
example:
- store: play
term: spotify
country: US
lang: en_US
id_user: spotify
limit: 5
crawled: '2022-12-18T16:21:50+00:00'
id: 0bEHJoUBcG6dNe-QhIJ5
results:
- type: apps
title: ''
items:
- com.spotify.music
layout: apps_mdp_search_results_cluster
- type: apps
title: You might also like
items:
- com.soundcloud.android
- tunein.player
- com.shazam.android
- org.craigslist.CraigslistMobile
- com.alphainventor.filemanager
- com.melodis.midomiMusicIdentifier.freemium
- video.player.videoplayer
layout: pre_install_users_also_installed
- type: apps
title: Similar apps
items:
- deezer.android.app
- com.dywx.larkplayer
- com.mmm.trebelmusic
- com.amazon.mp3
- com.audiomack
- com.soundcloud.android
- com.shazam.android
layout: similar_apps
headers:
X-Cost:
description: 'Credits this call cost, after any refund: 0 for a 422, a 429 or a 5xx response, except on job endpoints (the recrawl, liveops and suggestions operations), which are still billed; see https://github.com/romamo/as-rest/issues/99'
schema:
type: integer
X-Remaining-Credits:
description: Credits left on the account after this call
schema:
type: integer
X-Receipt:
description: Id of this call's billing receipt
schema:
type: string
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
headers:
X-Cost:
description: 'Credits this call cost, after any refund: 0 for a 422, a 429 or a 5xx response, except on job endpoints (the recrawl, liveops and suggestions operations), which are still billed; see https://github.com/romamo/as-rest/issues/99'
schema:
type: integer
X-Remaining-Credits:
description: Credits left on the account after this call
schema:
type: integer
X-Receipt:
description: Id of this call's billing receipt
schema:
type: string
'401':
description: The `API-KEY` header is missing or holds an unknown key
content:
application/json:
schema:
type: object
properties:
message:
type: string
code:
type: integer
required:
- message
- code
example:
message: Wrong key
code: 401
'402':
description: The credit balance does not cover this call's price; nothing was charged
content:
application/json:
schema:
type: string
example: Insufficient credits in your balance
headers:
X-Cost:
description: Price of the call that did not fit; nothing was charged
schema:
type: integer
X-Remaining-Credits:
description: Credits on the account when the call was refused
schema:
type: integer
security:
- APIKeyHeader: []
x-cost-credits: 1
post:
tags:
- Jobs
summary: Create a keyword crawl job
description: Submits a keyword crawl job for one search term in one store and country. Returns the created job immediately; poll `GET /jobs/search` with the returned id to collect the results.
operationId: create_search_jobs_search_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SearchCreate'
example:
store: play
term: spotify
country: US
lang: en_US
id_user: spotify
limit: 5
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/SearchResult'
example:
store: play
term: spotify
country: US
lang: en_US
id_user: spotify
limit: 5
id: 0bEHJoUBcG6dNe-QhIJ5
headers:
X-Cost:
description: 'Credits this call cost, after any refund: 0 for a 422, a 429 or a 5xx response, except on job endpoints (the recrawl, liveops and suggestions operations), which are still billed; see https://github.com/romamo/as-rest/issues/99'
schema:
type: integer
X-Remaining-Credits:
description: Credits left on the account after this call
schema:
type: integer
X-Receipt:
description: Id of this call's billing receipt
schema:
type: string
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
headers:
X-Cost:
description: 'Credits this call cost, after any refund: 0 for a 422, a 429 or a 5xx response, except on job endpoints (the recrawl, liveops and suggestions operations), which are still billed; see https://github.com/romamo/as-rest/issues/99'
schema:
type: integer
X-Remaining-Credits:
description: Credits left on the account after this call
schema:
type: integer
X-Receipt:
description: Id of this call's billing receipt
schema:
type: string
'401':
description: The `API-KEY` header is missing or holds an unknown key
content:
application/json:
schema:
type: object
properties:
message:
type: string
code:
type: integer
required:
- message
- code
example:
message: Wrong key
code: 401
'402':
description: The credit balance does not cover this call's price; nothing was charged
content:
application/json:
schema:
type: string
example: Insufficient credits in your balance
headers:
X-Cost:
description: Price of the call that did not fit; nothing was charged
schema:
type: integer
X-Remaining-Credits:
description: Credits on the account when the call was refused
schema:
type: integer
security:
- APIKeyHeader: []
x-cost-credits: 1
components:
schemas:
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
SearchResult:
properties:
store:
type: string
title: Store
term:
type: string
title: Term
country:
type: string
title: Country
default: US
lang:
type: string
title: Lang
default: en_US
repeat:
type: integer
title: Repeat
id_user:
type: string
title: Id User
limit:
type: integer
maximum: 250.0
minimum: 1.0
title: Limit
default: 1
limit_apps:
items:
type: string
type: array
title: Limit Apps
crawled:
type: string
format: date-time
title: Crawled
id:
type: string
title: Id
results:
items:
$ref: '#/components/schemas/Cluster'
type: array
title: Results
type: object
required:
- store
- term
- id
title: SearchResult
Store:
type: string
enum:
- play
- ios
title: Store
description: An enumeration.
SearchCreate:
properties:
store:
type: string
title: Store
term:
type: string
title: Term
country:
type: string
title: Country
default: US
lang:
type: string
title: Lang
default: en_US
repeat:
type: integer
title: Repeat
id_user:
type: string
title: Id User
limit:
type: integer
maximum: 250.0
minimum: 1.0
title: Limit
default: 1
limit_apps:
items:
type: string
type: array
title: Limit Apps
type: object
required:
- store
- term
title: SearchCreate
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
type: object
required:
- loc
- msg
- type
title: ValidationError
Cluster:
properties:
type:
type: string
title: Type
title:
type: string
title: Title
items:
items:
type: string
type: array
title: Items
layout:
type: string
title: Layout
type: object
required:
- type
- title
- items
- layout
title: Cluster
securitySchemes:
APIKeyHeader:
type: apiKey
in: header
name: API-KEY
externalDocs:
description: Guides, examples, a Postman collection and the Spectral ruleset
url: https://github.com/romamo/appstorespy-api-docs
x-provenance:
method: harvested
publisher: AppstoreSpy
source: https://api.appstorespy.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)