recipes skill
The looot plugin's step lists for common jobs: lead enrichment, account research, SEO and GEO checks, page to markdown, and social lookups.
recipes loads automatically to enrich a lead list, research a company from its domain, check
SEO and GEO (AI answer) visibility for a keyword, turn a web page into markdown, or look up a
social profile. Every recipe reuses the search-and-run loop from
find-and-run: before a job it hasn’t run yet, it searches and reads
jobInputs, since live input names win over anything written here. It quotes the estimated total
before a batch, checks balance, and gives every run its own idempotencyKey.
Enrich a lead list: find and verify a work email
- Quote it: read
costPerSuccessUsdforpeople.email.findandpeople.email.verify, multiply by the number of leads, checkbalance. - Find, one lead per run, with
first_name/last_name(orname) plusdomain:
{
"tool": "run",
"input": {
"endpointId": "job:people.email.find",
"input": {"first_name": "Jane", "last_name": "Doe", "domain": "example.com"},
"idempotencyKey": "leads-row1-find",
"fallback": {"maxAttempts": 3, "maxCostUsd": 0.1}
}
}
- Read
normalized.fields.email. Anoutcome: "weak"withverdict: "guessed"is a pattern guess, not a confirmed address. - Verify every address it keeps:
{
"tool": "run",
"input": {
"endpointId": "job:people.email.verify",
"input": {"email": "jane.doe@example.com"},
"idempotencyKey": "leads-row1-verify",
"fallback": true
}
}
- Read
normalized.fields.status:valid,invalid,catch_all,riskyorunknown. Keepvalid, flagcatch_allandriskyfor the user. - Runs a few leads at a time; on
too_many_inflight_runsit waits 2 seconds and retries with the same key. It reports found, verified and the total fromactualCost.
Account research from a domain
Each of these runs with {"domain": "<domain>"} and fallback: job:company.enrich (name,
industry, size), job:company.technographics (technologies the site runs), job:company.news
(recent news, also takes company), job:people.domain.search (known email addresses at the
domain), and job:linkedin.company.profile (takes linkedin_url when known).
{
"tool": "run",
"input": {
"endpointId": "job:company.enrich",
"input": {"domain": "example.com"},
"idempotencyKey": "research-example-enrich",
"fallback": {"maxAttempts": 2, "maxCostUsd": 0.1}
}
}
It writes one brief: what the company does, its size, stack, recent news and contacts, naming the
provider behind each fact from servedProviderId.
SEO and GEO check for a keyword
- Google results,
job:google.serp.organic(query, optionallylocation,language,country,device). - AI answers (GEO):
google.serp.ai-mode,search.google-ai-overview,search.chatgpt, checked for the brand and domain in the answer and its cited sources. - Search volume:
google.keywords.volume, quoted first since it’s priced higher than a results page. - Domain strength:
backlinks.domain.summary. - Steps 2 to 4 are jobs with one provider each: the skill searches for the job, inspects the
endpoint, then runs it with that endpoint’s own
requiredInputFields. - It reports the domain’s position in the results, whether each AI answer mentions or cites it, the volume, and the backlink totals.
Web page to markdown
{
"tool": "run",
"input": {
"endpointId": "job:web.scrape.markdown",
"input": {"url": "https://example.com/pricing"},
"idempotencyKey": "scrape-example-pricing",
"fallback": {"maxAttempts": 3, "maxCostUsd": 0.05}
}
}
It reads normalized.fields.markdown and title. A blocked, empty or sign-in page comes back as
a miss, and fallback moves on to the next scraper. web.scrape.structured returns JSON instead
of markdown.
Social profile lookup
| Network | Job | Input |
|---|---|---|
| LinkedIn person | job:linkedin.person.profile |
linkedin_url |
| LinkedIn company | job:linkedin.company.profile |
linkedin_url |
| TikTok | job:tiktok.user.profile |
handle (no @) |
job:instagram.user.profile |
handle (no @) |
{
"tool": "run",
"input": {
"endpointId": "job:tiktok.user.profile",
"input": {"handle": "exampleco"},
"idempotencyKey": "tiktok-exampleco",
"fallback": true
}
}
For another network, the skill searches for it (“x user profile”, “youtube channel”) and reads
jobInputs.
See find-email and research-company for the two recipes above wrapped as slash commands.