# App SDK Intelligence API - Mobile App Tech Stack Data (`nabeelbaghoor/app-sdk-intelligence-api`) Actor

Find mobile apps by the SDKs they run, their downloads, revenue or active users, then read the full record: store metadata, publisher and parent company, rating history, download and revenue estimates by day, and every SDK seen inside the app with first and last seen dates. Bring your own key.

- **URL**: https://apify.com/nabeelbaghoor/app-sdk-intelligence-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Business, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 app or publisher returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## App SDK Intelligence API - Mobile App Tech Stack Data

Find the mobile apps running a particular SDK, then read everything behind them: who publishes them, what they earn, how many people open them, and what else is inside the binary.

### What it does

- **Searches by what is inside the app, not just its name.** Filter by SDK, SDK count, estimated downloads and revenue over the last 30 days, daily and monthly active users, category, free or paid, and release date.
- **Search returns records, not identifiers.** The provider's search answers bare app ids; this actor takes those ids and reads the full record for each one, in batches of fifty, so a search run produces usable rows rather than a list of numbers.
- **Reads the SDK profile.** Every SDK seen inside an app, with its category and the dates it was first and last observed, so you can see adoption and churn rather than a static tag list.
- **Time series by day.** Download, revenue and active user estimates per app, per country, per day, and rating history on the same shape.
- **Publishers and parent companies.** Publisher rows carry catalogue size, 30 day downloads and revenue, and the parent company when the provider knows it, so a portfolio rolls up.
- **Five stores.** Apple App Store and Google Play, plus Xiaomi, 360 Mobile Assistant and Tencent MyApp.
- **Takes store URLs.** Paste an App Store or Google Play listing URL and the identifier is read out of it.
- **An escape hatch for hard filters.** The advanced query field takes the provider's own nested-array query form for anything the fields do not cover.
- **Keeps the misses.** An identifier the provider has no record of still produces a row saying so, and it is not charged for. A search that matches nothing costs nothing at all.

### Input

#### Find apps running a particular SDK

```json
{
  "mode": "search",
  "searchSubject": "app",
  "store": "google_play",
  "sdkIds": ["10", "20"],
  "minDownloads30d": 100000,
  "minMonthlyActiveUsers": 50000,
  "maxResults": 500
}
```

#### Look up apps you already have

```json
{
  "mode": "apps",
  "store": "itunes_connect",
  "ids": ["284882215", "https://apps.apple.com/us/app/nfl/id389781154"]
}
```

#### The SDKs inside an app

```json
{
  "mode": "sdks",
  "store": "google_play",
  "ids": ["com.facebook.katana"],
  "maxResults": 200
}
```

#### Download and revenue estimates by day

```json
{
  "mode": "estimates",
  "store": "itunes_connect",
  "ids": ["284882215"],
  "country": "US",
  "dateFrom": "2026-08-01",
  "dateTo": "2026-08-31",
  "maxResults": 100
}
```

#### An advanced query

```json
{
  "mode": "search",
  "advancedQuery": [
    ["match", "kingdom", "batman"],
    ["filter", [["not", ["=", "primary_category_id", 6014]], [">", "rev_tier_30d", 100]]]
  ]
}
```

### Example output

An app row and an SDK row.

```json
{
  "recordType": "app",
  "store": "google_play",
  "appId": "com.facebook.katana",
  "name": "Facebook",
  "publisherId": "5348452345",
  "publisherName": "Meta Platforms, Inc.",
  "kind": "free",
  "primaryCategoryId": 6005,
  "releasedOn": "2011-06-15",
  "currentVersion": "512.0.0.42.72",
  "rating": 4.1,
  "sdkCount": 47,
  "downloads30d": 24800000,
  "revenue30d": 0,
  "dailyActiveUsers": 41200000,
  "monthlyActiveUsers": 186000000,
  "found": true
}
```

```json
{
  "recordType": "sdk",
  "store": "google_play",
  "appId": "com.facebook.katana",
  "sdkId": "142",
  "sdkName": "Firebase Analytics",
  "sdkCategory": "Analytics",
  "firstSeenOn": "2019-04-11",
  "lastSeenOn": "2026-08-29",
  "installed": true,
  "found": true
}
```

### Bring your own key

This actor calls an app and SDK intelligence API with **your own account's credentials**: the client name and client secret the provider issued you when your Data API access was set up. Put the client name in the client name field, and the secret in the client secret field or the `DATA_API_KEY` environment secret. They are exchanged for a session token at the start of the run and are never written to the dataset or the log.

Without them the run ends cleanly and tells you what to add, rather than failing.

### Pricing

Pay per result, platform usage included.

| Event | Price |
| --- | --- |
| App or publisher returned | $0.015 |
| Metric or SDK row returned | $0.006 |

Rows for identifiers the provider has no record of, and requests it refused, are never charged. A search that matches nothing is never charged.

### FAQ

#### What is an SDK intelligence API?

An API that reports which third-party software development kits are compiled into a mobile app: the analytics, advertising, attribution, payments, crash reporting and other libraries inside it. It turns "which apps use this SDK" into a query, which is how mobile ad-tech, analytics and payments vendors build target lists and track competitors.

#### Can I find every app that uses a specific SDK?

Yes. Put the provider's SDK ids in the SDKs in use field and run a search. Add a minimum download, revenue or active user threshold to keep the list to apps worth contacting.

#### What app data comes back?

Name, store, publisher and parent company, primary and secondary categories, free or paid, release date, last version update, current version, price, rating and rating count, SDK count and SDK ids, estimated downloads and revenue over the last 30 days, and estimated daily and monthly active users.

#### Which app stores are covered?

Apple App Store (`itunes_connect`), Google Play (`google_play`), Xiaomi, 360 Mobile Assistant and Tencent MyApp. The store is part of the provider's route, so one run reads one store.

#### How far back do the time series go?

The provider accepts at most 180 days in a single request. Set `dateFrom` and `dateTo` within that window; the default is the last 30 days.

#### What identifiers does it take?

An App Store numeric id, a Google Play package name, a publisher id, or a store listing URL containing one. URLs are parsed for you.

#### Are downloads and revenue real figures?

They are modelled estimates from the data provider, not figures reported by Apple or Google. Two model versions are available and the provider's default is used unless you pick one.

#### Do I need my own API key?

Yes. This actor is bring-your-own-key: it signs in with your account's client name and secret, so you keep your own plan, allowance and terms. There is no shared or bundled credential.

#### What if the fields do not cover the filter I need?

Use the advanced query field. It takes the provider's own query form, a JSON array combining a `match` form and a `filter` form of `[predicate, attribute, value]` triples, and it is sent exactly as given.

#### How is the price calculated?

Per row stored. App and publisher records are $0.015, and time series points and SDK rows are $0.006. Rows saying something was not found cost nothing.

### Keyword map

app SDK intelligence API, mobile app tech stack API, SDK detection API, app store data API, mobile app intelligence, find apps using an SDK, app download estimates API, app revenue estimates API, mobile ad tech prospecting, app publisher data API, google play data API, app store scraper alternative, DAU MAU estimates, mobile app market intelligence

# Actor input Schema

## `mode` (type: `string`):

A run answers one question. Search finds apps or publishers by name and by filters, then reads their records. Apps and publishers look up records for identifiers you already have. Estimates, ratings and SDKs read the time series and the technology profile. Fields belonging to another mode are ignored rather than causing an error.

## `clientId` (type: `string`):

The client name the provider issued you when your Data API access was set up. Paired with the client secret below to sign in. Bring your own key: nothing is shared between runs.

## `apiKey` (type: `string`):

The client secret the provider issued you. Exchanged for a session token at the start of the run, and never written to the dataset or the log.

## `store` (type: `string`):

Which app store to read. The store is part of the provider's route rather than a filter, so one run reads one store.

## `ids` (type: `array`):

Apps or publishers to read, one per line. An App Store numeric id, a Google Play package name, a publisher id, or a store listing URL that carries one. Used by every mode except search.

## `searchSubject` (type: `string`):

Whether search mode looks for apps or for publishers. The two take different filters, so the fields that do not apply are ignored.

## `searchTerms` (type: `array`):

Words to match against the app or publisher name, one per line. A record matching any of them is returned, so several terms widen the search rather than narrowing it.

## `categoryId` (type: `integer`):

Limit an app search to one primary category, by the store's own numeric category id such as 6005 for Social Networking. Leave empty for every category.

## `appKind` (type: `string`):

Limit an app search to free or to paid apps.

## `sdkIds` (type: `array`):

Limit an app search to apps carrying any of these SDKs, one provider SDK id per line. This is how you build a list of apps running a particular analytics, advertising or payments SDK.

## `minSdkCount` (type: `integer`):

Only apps with at least this many SDKs installed. A high SDK count usually means a well funded app with a real stack behind it.

## `minDownloads30d` (type: `integer`):

Only records with at least this many estimated downloads in the last 30 days.

## `minRevenue30d` (type: `integer`):

Only records with at least this much estimated revenue in the last 30 days.

## `minDailyActiveUsers` (type: `integer`):

Only apps with at least this many estimated daily active users, as of the moment of the request.

## `minMonthlyActiveUsers` (type: `integer`):

Only apps with at least this many estimated monthly active users, as of the moment of the request.

## `minAppCount` (type: `integer`):

Only publishers with at least this many known apps. Used by a publisher search.

## `releasedAfter` (type: `string`):

Only apps released on or after this date, as YYYY-MM-DD. Useful for finding new entrants in a category.

## `advancedQuery` (type: `object`):

The provider's own query form, for filters the fields above do not cover. A JSON array such as \[\["match","weather"],\["filter",\[\[">=","sdk\_count",10]]]]. When this is set it is sent as given and the fields above are ignored.

## `country` (type: `string`):

Two letter country code for the estimates and ratings time series, such as US or GB.

## `dateFrom` (type: `string`):

First day of a time series, as YYYY-MM-DD. Defaults to 30 days before the end date. The provider allows at most 180 days in one request.

## `dateTo` (type: `string`):

Last day of a time series, as YYYY-MM-DD. Defaults to yesterday.

## `modelVersion` (type: `string`):

Which estimate model to read. Leave empty for the provider's default. Only set this if the provider has told you to.

## `maxResults` (type: `integer`):

The most rows this run may store, and so the most it can charge for. A daily estimates run produces one row per app per day, which adds up quickly, so this is the cap that keeps a run predictable.

## `requestsPerMinute` (type: `integer`):

How fast this run calls the provider. The documented ceiling is 1000 a minute; lower this if your plan is tighter.

## `baseUrl` (type: `string`):

Overrides the API host. Only needed if the provider has given your account a different endpoint.

## Actor input object example

```json
{
  "mode": "search",
  "store": "itunes_connect",
  "searchSubject": "app",
  "appKind": "",
  "country": "US",
  "modelVersion": "",
  "maxResults": 100,
  "requestsPerMinute": 300
}
```

# Actor output Schema

## `records` (type: `string`):

One row per record, alongside the store, identifier and date that produced it.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/app-sdk-intelligence-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/app-sdk-intelligence-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call nabeelbaghoor/app-sdk-intelligence-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/app-sdk-intelligence-api"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/FbXSAUrDhxi9I6d9q/builds/pdyNsa2faC9q7Zxbd/openapi.json
