{"server":"io.apptail/apptail","count":4,"changes":[{"tool":"get_market","kind":"changed","observed_at":"2026-10-04T22:40:29.218Z","fields":["outputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"867e4804faf4b87296ae8ac435bd4d23","after_hash":"61f60c562aeeda9c6cf089a0ee0dd812"},{"tool":"get_landscape","kind":"changed","observed_at":"2026-10-04T22:40:29.218Z","fields":["outputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"8fcad38ebb4b7dfd1fd9f92b86989ca2","after_hash":"4d3e64a18417a80d2a1be0e8a5a5c95f"},{"tool":"tag_keywords","kind":"changed","observed_at":"2026-10-04T22:40:29.218Z","fields":["description","inputSchema","outputSchema"],"description_before":"Put tracked keywords under a tag, in bulk — or clear their tag. The tag is named, not looked up: a name that does not exist yet is created. This is the tool for organising a large corpus after reading it with get_keywords (\"tag every branded term as brand\"), which is drudgery in the console and one call here. A keyword carries at most one tag, so assigning replaces whatever it had.","description_after":"Put tracked keywords under a tag, in bulk — or clear their tag — and/or say whether they are brand terms for Search Visibility. The tag is named, not looked up: a name that does not exist yet is created. A keyword carries at most one tag, so assigning replaces whatever it had. `brand` is separate from tags: `own` (your app's name) and `competitor` (a rival's name) leave the terms out of the visibility score, `none` counts them whatever detection says, `auto` hands them back to detection. Send `brand` without `tag` to change only that — the tags stay as they are. This is the tool for organising a large corpus after reading it with get_keywords, which is drudgery in the console and one call here.","description_similarity":0.584,"before_hash":"f4da999f7057d74f0c9f6cbfefd9163a","after_hash":"134b750b994d8fc36804dbc79f8ac3bb"},{"tool":"get_keywords","kind":"changed","observed_at":"2026-10-04T22:40:29.218Z","fields":["description","inputSchema","outputSchema"],"description_before":"The account's tracked keywords for an app — or across the whole portfolio — over any window: where each term ranked at the start and end, how far it moved, how many days it held and how many days it was measured, and optionally its day-by-day history, the same terms measured for named competitors, the daily top-1/3/10/30/50/100 counts, and the terms two of your own apps are both on. Sorted worst movement first by default, so \"what dropped\" is at the top of a 300-term corpus — which also makes the returned rows a selection rather than a sample: `movers` and `coverage` are counted over the whole corpus and are what a summary comes from. Filter by `contains` to ask about one term by name. This is the tool for every question about tracked terms; it replaces get_tracked_keywords, get_keyword_positions and compare_keyword_positions.","description_after":"The account's tracked keywords for an app — or across the whole portfolio — over any window: where each term ranked at the start and end, how far it moved, how many days it held and how many days it was measured, and optionally its day-by-day history, the same terms measured for named competitors, Search Visibility (a 0–100 score per storefront with the terms that moved it), and the terms two of your own apps are both on. Sorted worst movement first by default, so \"what dropped\" is at the top of a 300-term corpus — which also makes the returned rows a selection rather than a sample: `movers` and `coverage` are counted over the whole corpus and are what a summary comes from. Filter by `contains` to ask about one term by name. This is the tool for every question about tracked terms; it replaces get_tracked_keywords, get_keyword_positions and compare_keyword_positions.","description_similarity":0.862,"before_hash":"12a1dedf515d1a80ed1b073eb8f6d58f","after_hash":"afbe882e2bd29467a213e69ad0776ef5"}],"next_before":null,"next_actions":[]}