mcpField
S
search

search

github.com/appfollowMarketing & growth467 installsUpdated today
Repository

About search

An AppFollow skill for finding apps through store search and optionally adding selected results to a tracking collection. It is for teams maintaining app lists, and includes deduplication, user approval, and a read-only fallback when writes fail.

Key features

  1. 01Search stores by app name
  2. 02Present candidates and confirm matches
  3. 03Check collections for duplicates
  4. 04Add apps to tracking with approval
  5. 05Report added and unadded results

Use cases

  1. 01Find store listings for apps to analyze
  2. 02Add owned apps to an AppFollow collection
  3. 03Track explicitly designated competitors
  4. 04Keep candidate references when writes are blocked

MCP support

The skill uses AppFollow MCP tools to search apps and read collections and app lists, then adds collections or apps after user approval. Search and deduplication can be completed without writes.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/appfollow/appfollow-ai-toolkit --skill search

After installing, type/searchin Claude Code to confirm it loaded.

Details

From the project README

search — find + track apps

Read using-appfollow first (session opening, write ritual, error codes).

Inputs

  • query: app name (free-text search keywords).
  • store: the short store code — as (App Store) or gp (Google Play) for the search; add_app takes all ten codes (using-appfollow → references/tool-map.md).
  • country (default us), collection (name; created if new), locale.

Flow

  1. Session: whoami (see using-appfollow).
  2. Normalize input. Search takes free-text keywords only — the ASO search endpoints do not accept a store URL or an ext_id. Trim the query to the app name (strip any pasted URL down to the app name/title before searching).
  3. Search (read-only, any plan). Call aso_search_results (optionally aso_search_suggestions, 12 cr). Present numbered candidates. Auto-pick only a single exact-title match; otherwise the user picks.
  4. Resolve collection. list_collections. If the target collection is new, run add_collection_preview → user approval → add_collection.
  5. Dedupe (read-only). list_apps (apps_id = the target collection's collectionId); if the app's extId is already there, record it under skipped_existing and skip the add. list_apps reports store as the long name (itunes = as, googleplay = gp).
  6. Add (write — may be plan-gated). add_app_preview → explicit user approval → add_app with identical args: store (short code), ext_id, apps_id, locale (two-letter country code). Pass is_competitor: true only when the user says the app is a rival (default: one of their own).
  7. Verify. list_apps again; confirm the app's extId now appears; keep the collection's apps_id with it — the report skills address the app by apps_id + ext_id.
  8. Emit the JSON block (below).

Read-only degrade path (plan-gated writes)

add_collection requires an Advanced API / Custom plan; neither it nor add_app carries a feature gate — so a plan block does not arrive as FEATURE_DISABLED. It can surface as ACCESS_DENIED, VALIDATION_ERROR (on add_app, a full apps or competitors limit), or UPSTREAM_ERROR. Therefore:

  • Always complete search + dedupe (read-only — works on any plan).
  • Attempt the add_* confirm.
  • On any error code from the add, do not assert a specific code. Report the candidate refs you found, state plainly that the add could not be completed (likely a plan limitation), and list the found refs under not_added so the report skills can still target them (they may already be tracked).

Output (fenced JSON)

{
  "added": [{"store": "as", "ext_id": "389801252", "apps_id": 12345, "collection": "Core apps", "locale": "us", "title": "Example App"}],
  "skipped_existing": [],
  "not_added": [],
  "collection_created": null,
  "credits_spent_estimate": 13
}

Comments

Markdown supported