Lookup
Look up the technology profile of any desktop app. Returns SDKs, frameworks, dependencies, and more.
GET /v1/lookup — Returns detected technologies, SDK summary, and app metadata for a desktop application.
API at a glance
- Base URL:
https://desktopinsights.com/api/v1/lookup - Method:
GET - Auth:
Authorization: Bearer <API_KEY> - Required param:
app(string) — app name or bundle ID - Optional param:
platform—macosorwindows - Response: JSON with
data[]array containingapp,sdkSummary, andtechnologiesobjects
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
app | string | yes | App name or bundle ID (e.g., Notion or com.figma.Desktop) |
platform | string | no | macos or windows. Omit to search both. |
Example request
curl "https://desktopinsights.com/api/v1/lookup?app=Notion&platform=macos" \ -H "Authorization: Bearer di_live_your_key_here"
Response
{
"data": [{
"app": {
"name": "Notion",
"bundleId": null,
"slug": "notion",
"developer": "Notion Labs, Incorporated",
"developerWebsite": null,
"platform": "macos",
"currentVersion": "7.9.0",
"runtime": "electron",
"electronVersion": "39.6.0",
"chromiumVersion": null,
"nodeVersion": null,
"dependencyCount": 45,
"appSizeBytes": 285253632,
"architectures": ["arm64"],
"minOsVersion": "12.0",
"localizations": ["en", "ja", "de", "fr", "..."],
"extractedAt": "2026-03-29T20:57:11.783Z",
"signed": true,
"notarized": true,
"installerType": null,
"bundledLibraryCount": 3
},
"sdkSummary": {
"errorTrackingSdk": null,
"analyticsSdk": null,
"featureFlagSdk": null,
"databaseSdk": "SQLite",
"uiFramework": "React",
"stateManagement": "Redux",
"paymentsSdk": null,
"authSdk": null,
"observabilitySdk": "electron-log",
"realtimeSdk": null,
"autoUpdateSdk": "electron-updater"
},
"technologies": [{
"name": "Electron",
"version": "39.6.0",
"category": "Runtime",
"confidence": 100
}, {
"name": "React",
"version": "16.13.1",
"category": "UI Framework",
"confidence": 80
}, {
"name": "Redux",
"version": "2.2.3",
"category": "State Management",
"confidence": 80
}, {
"name": "SQLite",
"version": "12.4.6",
"category": "Database",
"confidence": 80
}, {
"name": "electron-updater",
"version": "4.1.2",
"category": "Auto-Update",
"confidence": 80
}]
}],
"meta": {
"requestId": "req_f0480c69",
"resultCount": 1,
"query": "Notion",
"platform": "macos"
}
}
App object
Always present in the response.
| Field | Type | Description |
|---|---|---|
name | string | Display name |
bundleId | string or null | macOS bundle identifier (e.g., com.figma.Desktop) |
slug | string | URL-safe identifier |
developer | string or null | Developer/company name |
developerWebsite | string or null | Developer website URL (primarily Windows apps) |
platform | string | macos or windows |
currentVersion | string | Latest detected version |
runtime | string | electron, native, qt, flutter, dotnet, jvm, rust, python, etc. |
electronVersion | string or null | Electron version if applicable |
chromiumVersion | string or null | Chromium version if detected |
dependencyCount | integer | Total detected dependencies |
appSizeBytes | integer | App bundle size in bytes |
architectures | string[] | ["arm64"], ["x86_64"], or ["arm64", "x86_64"] |
minOsVersion | string | Minimum supported OS version |
localizations | string[] | Supported language codes |
extractedAt | string | ISO 8601 timestamp of last extraction |
signed | boolean or null | Whether the app binary is code-signed |
notarized | boolean or null | Whether the app is Apple-notarized (macOS only) |
installerType | string or null | Windows installer type: wix, nsis, inno, msi, etc. |
bundledLibraryCount | integer or null | Number of bundled native libraries detected |
SDK summary object
Flat object with one field per major SDK category. Designed to map directly to Clay table columns. null means no SDK was detected in that category.
| Field | Type | Example values |
|---|---|---|
errorTrackingSdk | string or null | Sentry, Bugsnag, Crashpad, Dynatrace, Rollbar |
analyticsSdk | string or null | Firebase Analytics, Amplitude, PostHog, Mixpanel, Segment |
featureFlagSdk | string or null | LaunchDarkly, Unleash, Statsig, GrowthBook |
databaseSdk | string or null | SQLite, electron-store, Realm, LevelDB, NeDB |
uiFramework | string or null | React, Vue, Angular, Qt, Svelte, SwiftUI |
stateManagement | string or null | Redux, MobX, Zustand, Jotai, XState |
paymentsSdk | string or null | Stripe |
authSdk | string or null | Auth0, Passport.js |
observabilitySdk | string or null | OpenTelemetry, Winston, electron-log, Pino |
realtimeSdk | string or null | Socket.IO, WebRTC |
autoUpdateSdk | string or null | electron-updater, Sparkle, Squirrel |
Technologies array
Detailed list of detected technologies with version and confidence information.
| Field | Type | Description |
|---|---|---|
name | string | Technology name (e.g., "Sentry", "React") |
version | string or null | Detected version, null if unknown |
category | string | Category (e.g., "Error Tracking", "UI Framework", "Runtime") |
confidence | integer | Detection confidence: 100 (package.json), 95 (node_modules), 80 (bundle analysis), 70 (binary libraries) |
Name matching
The API resolves app names in four steps:
- Alias check — common alternative names are resolved first (e.g.,
VS Code→Code,Zoom→zoom.us,Figma→figma-desktop) - Exact match — case-insensitive name match (e.g.,
Slack) - Slug match — matches URL-safe slug prefix (e.g.,
Figmamatchesfigma-desktop) - Fuzzy match — contains match (e.g.,
CodefindsCode,CodeBuddy, etc.)
For best results, use the exact app name as displayed in the macOS Applications folder or Windows Start menu. Common names like "VS Code", "Zoom", and "Figma" are handled automatically.
Advisories (beta)
Beta. The advisory/KEV signal is a beta feature available to authenticated API keys. Every response object carries "beta": true. The shape may change; do not build hard dependencies on it yet.
Add include=advisories to attach known-advisory exposure for the app's bundled dependencies, derived from public sources (OSV advisories + the CISA Known Exploited Vulnerabilities catalog). Data reflects the current inventory; there is no separate derivation — it reuses the same signal that powers our internal exposure tracking.
curl "https://desktopinsights.com/api/v1/lookup?app=Notion&platform=macos&include=advisories" \ -H "Authorization: Bearer di_live_your_key_here"
The advisories object (present only when the app has been scanned):
| Field | Type | Description |
|---|---|---|
beta | boolean | Always true — this surface is beta. |
advisoryCount | integer | Advisory hits across the app's vulnerable components (an advisory affecting N components counts N times, not once). Includes null-CVE GHSA/RUSTSEC advisories. |
kevCount | integer | Advisories that appear in the CISA KEV catalog — the sharpest, version-confirmed signal. |
worstSeverity | string | Highest severity band observed (critical/high/medium/low/unknown). |
vulnerableComponents | integer | Number of distinct package URLs (purls) with at least one advisory. |
bySeverity | object | Counts by band: critical, high, medium, low, unknown. |
coverage | object | null | How many components were versioned / unversioned / uncovered for matching (honest about what could be checked). |
findings | array | Per-component detail { purl, type, cves: [{ id, cve, kev, band, published }] } (id = OSV/GHSA id, cve may be null for GHSA/RUSTSEC-only advisories, kev = in CISA KEV, band = severity band, published = advisory publish date). Purls for case-insensitive ecosystems (nuget/npm/pypi) are lower-cased for a consistent identifier. |
advisoriesSignal sits alongside the object: "scanned" when the app has advisory data, "not-scanned" when it has never been scanned (in which case advisories is null — absence is never reported as "no advisories").
Coming soon
The following capabilities are under development:
includemodules for controlling response depth (dependencies, security, compliance, scores)- Batch lookups (multiple apps per request)
appsparameter for batch requests