agentleFS
mesmerlordmesmerlord/lurkapi-claude-plugin/skills/lurk/SKILL.md

lurk

Skill0 starsChanged 16 days agoMITView on GitHub

Lurk a brand. From just a name or a website, a one-page snapshot of whether it advertises right now on Meta and Google, what its live ads push, and how big it is on Facebook, Instagram and TikTok, in 4 calls (the run behind the LurkAPI dashboard). Use when the user names a company or domain and asks what it is up to, whether it runs ads, how big it is on social, or wants a quick competitor check.

  • Reads credentials

The file

We split this skill into the rules it gives an agent

1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    No page found? Skip both round 2 calls, which need it, and say the brand has no Facebook page under that name.

    line 40

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Lurk a brand

One name or website in, one page out: is the brand advertising right now, where, saying what, and how big is its audience. Four calls in two rounds. For a full teardown of the ads afterwards, use the ad-research skill.

<!-- lurkapi:access -->

Calling LurkAPI

With MCP (the LurkAPI plugin or connector), call the tools by name, like tiktok_profile; your client may prefix them (mcp__plugin_lurkapi_lurkapi__tiktok_profile). With only find_endpoints and call_endpoint, run a tool as call_endpoint with endpoint set to its name and params to its arguments. Results come trimmed: no nulls, one URL per image or video. A long result comes in parts: its _note gives the offset for the next part, which is free.

Without MCP (Codex, Cursor, scripts), every tool is GET https://api.lurkapi.com plus its path, with the same params as a query string (URL-encoded) and the key from LURKAPI_API_KEY in the x-api-key header:

curl -s "https://api.lurkapi.com/v1/tiktok/profile?handle=nike" -H "x-api-key: $LURKAPI_API_KEY"

If LURKAPI_API_KEY isn't set but LURKAPI_KEY is (the name older docs used), use that. Raw answers are big: pipe them through jq to keep the fields you need. No key yet? Ask the user to create one at https://lurkapi.com/dashboard (100 free credits on sign-up, then a balance below 25 tops back up to 25 every day) and to set LURKAPI_API_KEY in their shell. Never ask for the key in the chat, and never print it.

Credits. Each call costs what the table at the end says, not_found included; failures on our side (5xx) are free. Every answer carries credits_remaining. Before a run of more than 20 calls, check the balance with account_credit_balance (free) and tell the user what the run will cost. If a call answers missing_api_key, insufficient_credits or signup_required, stop and pass on what it says.

<!-- /lurkapi:access -->

Run

Work out the brand's name (Nike) and its website (nike.com) from what the user gave. If you're unsure of the website, ask, or try <name>.com and say so.

Round 1, both at once:

  1. facebook_search_companies(query=<name>) finds the brand's Facebook page. Take the first of searchResults unless a later one is clearly the brand: the exact name, verification of BLUE_VERIFIED, the most likes. Big brands have regional and product pages; name the runner-up if it was close. Keep its page_id, likes (Facebook followers), ig_username and ig_followers.
  2. google_company_ads(domain=<website>, region=US) lists the ads promoting the site on Google Search, YouTube, Maps, Play and Shopping. Read number_of_ads_estimate, and from ads the advertiserName, format and firstShown of the first few. Anyone advertising the site shows up here, resellers and agencies included; the ads are the brand's own only when advertiserName contains its name. Use the brand's home country as region when it isn't American.

Round 2, both at once, as soon as the page is known:

  1. facebook_company_ads(pageId=<page_id>, status=active, trim=true) returns the live ads on Facebook and Instagram, most seen first, up to 30. searchResultsCount is Meta's estimate of how many are live.
  2. tiktok_profile(handle=<ig_username>): brands use the same handle on both far more often than not. Read stats.followerCount, stats.heartCount and stats.videoCount. Check it's really theirs: an account with no bio (user.signature), a handful of followers and no videos is a squatter, so say the brand doesn't own the handle. A not_found means there's no TikTok under that handle; say so rather than guessing another.

No page found? Skip both round 2 calls, which need it, and say the brand has no Facebook page under that name. No ig_username? Skip the TikTok call.

That's the lurk: four calls. Stop there unless the user asks for more; each extra lookup (instagram_profile, youtube_channel, linkedin_company) is one more call.

Read the ads

From the live Meta ads, find what repeats, not what's listed first:

  • The offer and the angle. The primary text is snapshot.body.text (or snapshot.cards[].body for carousels); the headline is snapshot.title. Quote real lines.
  • The ads that work. An ad still running weeks after its start_date (Unix seconds) is the best public sign that it pays. A high collation_count means many versions of one ad: they're scaling or testing it.
  • Where it sends people. snapshot.link_url and snapshot.cta_text.
  • Where it runs. publisher_platform: Facebook, Instagram, Messenger, Threads.

Skip ads whose text holds template tags like {{product.name}}: those are catalog ads and say nothing about the brand's message.

Report

## <Brand>, lurked <date>

| | |
| --- | --- |
| Meta ads live | about <n> (Facebook page <name>, <likes> followers) |
| Google ads | about <n>, as <advertiser name>, mostly <format> |
| Instagram | @<handle>, <followers> followers |
| TikTok | @<handle>, <followers> followers, <likes> likes |

**What they're pushing.** 3 to 5 bullets: the offers, products and hooks that repeat in the live ads, each with a quoted line.

**The ad to study.** The longest-running live ad: its copy, how long it has run, where it sends people, and its link (https://www.facebook.com/ads/library/?id=<ad_archive_id>).

**Read.** Two sentences: how hard they're advertising, and where they're strongest.

Pitfalls

  • Counts are estimates (Meta's and Google's). Say "about".
  • Live doesn't mean winning: only run time hints at that. Spend and results aren't public, except for political ads.
  • Google's region=US counts only ads shown in the US; ALL counts everywhere.
  • The Facebook page search can match a fan page or a namesake. If the followers look wrong for the brand, say so before reading its ads.
<!-- lurkapi:calls -->

Calls and credits

ToolREST pathCredits
facebook_search_companies/v1/facebook/adLibrary/search/companies1 credit
google_company_ads/v1/google/company/ads1 credit
facebook_company_ads/v1/facebook/adLibrary/company/ads1 credit
tiktok_profile/v1/tiktok/profile1 credit
instagram_profile/v1/instagram/profile1 credit
youtube_channel/v1/youtube/channel1 credit
linkedin_company/v1/linkedin/company1 credit

Each tool's link opens its docs as markdown: every param and its values, and a real response.

<!-- /lurkapi:calls -->

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.