How to use these
Every skill below is written to be pasted straight into an AI agent. Copy the block, add your own inputs where it asks for them, and run it. They are the plays I use on client work, given away because the play matters far less than knowing when to run it.
Company Size Range Bucketer
Normalize messy headcount and revenue values into consistent size bands for clean segmentation.
Requires LLM, Google Sheets
Purpose
Convert inconsistent headcount and revenue fields into standardized size bands so segmentation and routing rules stay reliable.
Inputs
- Account list with raw employee count and revenue columns
- Your defined band thresholds (for example 1 to 10, 11 to 50, 51 to 200)
- Optional source column noting where each value came from
Steps
- Scan the headcount column and flag entries stored as ranges, text, or nulls.
- Parse messy values into a single integer, taking the midpoint for any provided range.
- Map each cleaned integer to the matching size band using your thresholds.
- Repeat the parse and map process for the revenue column into revenue bands.
- Cross-check headcount band against revenue band and flag rows where the two disagree sharply.
- Fill missing bands using the more complete of the two fields when only one exists.
- Tally row counts per band so you can see distribution before targeting.
Output
The list with normalized SizeBand and RevenueBand columns, a mismatch flag column, and a summary count of accounts per band.
Competitor Customer Scraper
Finds companies publicly using a competitor and turns them into an outbound list.
Requires Serper, Apify, Clay, LLM
Purpose
Assemble a list of companies that already use a named competitor so you can pitch a switch.
Inputs
- Competitor name and product
- Target buyer titles
- Signals to search, such as case studies, review sites, or job posts
Steps
- Run Serper queries for the competitor name across G2, Capterra, case study pages, and "powered by" mentions to collect candidate company URLs.
- Use an Apify site scraper to pull company names and domains from the collected pages.
- Load the domains into Clay and dedupe, then enrich each with firmographics like industry, size, and country.
- Add an LLM column that reads each source snippet and labels the usage signal as confirmed, likely, or weak.
- Keep only confirmed and likely rows, then find contacts at each company matching the target titles with a Clay contact enrichment.
- Waterfall verified emails and export.
Output
A list of companies with evidence of competitor usage, matched contacts, verified emails, and a signal strength label for prioritization.
Email Waterfall Deduper
Cleans and enriches a raw list into a deliverable, deduped, verified send list.
Requires Clay, LLM
Purpose
Turn a messy exported list into a clean, deduped, verified send list that will not burn your sending domains.
Inputs
- A raw CSV with names, companies, and any existing emails
- Your list of already contacted or suppressed domains
Steps
- Load the CSV into Clay and normalize company names and domains to a consistent format.
- Dedupe on email first, then on the combination of full name and domain to catch repeats.
- Cross reference the suppression list and remove any matching domains or addresses.
- Run a verified email waterfall using Prospeo then a fallback provider, filling gaps and replacing catch-all or invalid addresses.
- Add a validity column and drop risky, role based, or unverifiable addresses like info@ and sales@.
- Use an LLM column to flag rows where the name looks like a team alias rather than a person.
- Export only rows marked valid and personal.
Output
A deduped, suppression-safe CSV of verified personal emails ready to upload to a sequencer without inflating bounce rate.
Hiring Signal Account List
Turns open job postings into an account list showing active budget and pain.
Requires Apify, Clay, LLM
Purpose
Build an account list from companies hiring for roles that imply they have the problem your product solves.
Inputs
- Job titles or keywords that signal your pain, such as "RevOps" or "deliverability"
- Target locations and company size
- Freshness window in days
Steps
- Run an Apify job board scraper across LinkedIn Jobs and Indeed for the target keywords and locations.
- Keep postings inside the freshness window and extract company name, role, and posting date.
- Load into Clay and group rows by company, counting how many relevant roles each is hiring for.
- Enrich company domain and firmographics, then filter to the target size band.
- Use an LLM column to summarize why each hire signals your pain in one sentence.
- Find one to two contacts per account above the hiring manager and enrich verified emails.
Output
An account list ranked by number of relevant open roles, with a plain summary of the buying signal and matched contacts.
Intent Keyword Account Filter
Turn a raw account list into a ranked list using public intent signals from search and site behavior.
Requires Serper, LLM
Purpose
Rank a raw account list by public buying signals so reps work the warmest accounts first.
Inputs
- CSV of company names and domains
- 5 to 10 intent keywords tied to your problem space
- Your product one-liner for relevance scoring
Steps
- For each account, run Serper searches pairing the company name with each intent keyword.
- Capture recent hits like blog posts, press releases, job posts, and forum threads that mention the keywords.
- Score each hit for recency, using 90 days or less as strong and older as weak.
- Have the LLM read snippets and tag each account as active signal, passive signal, or no signal.
- Assign a numeric score combining signal strength, recency, and keyword match count.
- Sort accounts high to low and write a one-line reason next to each top account.
- Flag accounts with zero public signal for a separate low-priority queue.
Output
A ranked CSV with score, signal tag, source URL, and a short reason per account, plus a low-priority overflow list.
Job Change Trigger List
Builds a warm list of prospects who started a target role in the last 90 days.
Requires LinkedIn Sales Nav, Clay, LLM
Purpose
Build a list of buyers who recently moved into a decision-making role so you reach them during their first-90-days buying window.
Inputs
- Target job titles and seniority
- Company size band and target regions
- Number of prospects wanted
Steps
- In LinkedIn Sales Navigator, set the title, seniority, and geography filters, then apply the "Changed jobs in past 90 days" spotlight filter.
- Export the matching people into Clay, keeping name, title, company, and start date.
- In Clay, enrich each row with a verified work email using a waterfall of Prospeo then a secondary provider, and drop rows with no valid email.
- Add a column that calculates days since start date and flag anyone past 90 days for removal.
- Use an LLM column to draft a one line "new role" opener referencing their move and prior company.
- Filter to valid email plus start date under 90 days and export the final CSV.
Output
A CSV of recently promoted or newly hired buyers with verified emails and a personalized opener line ready for sequencing.
Personal Email Domain Splitter
Separate free webmail contacts from corporate domains so you route enrichment and sending correctly.
Requires Any LLM
Purpose
Split a contact list by email domtype type into corporate versfree webmail addresses so each group gets the right enrichment and outreach path.
Inputs
- CSV of contacts with an email column
- Optional list of known free webmail domains
Steps
- Parse each email and extract the domain after the at sign.
- Match each domain against a maintained list of free webmail providers such as gmail.com, yahoo.com, outlook.com, and icloud.com.
- Tag every row as corporate, free webmail, or unknown when the domain looks like a company but is unverified.
- Flag role based prefixes like info, sales, and support inside the corporate group for separate handling.
- For free webmail rows, note that firmographic enrichment will likely fail and suggest a person level lookup instead.
- Count rows per group and report the percentage that is corporate.
Output
Three labeled segments plus a short summary of how many contacts are safe for company enrichment versus person only routing.
Personal Email Guess And Verify
Generate likely personal email patterns per contact and validate them before adding to a list.
Requires Any LLM, email verification API
Purpose
Produce plausible personal or catch-all email addresses for contacts who lack a verified email, then confirm which ones are deliverable.
Inputs
- CSV of contacts with first name, last name, company domain
- Known company email pattern if available
- Access to an email verification API (NeverBounce, ZeroBounce, or similar)
Steps
- For each row, list the common patterns such as first.last, flast, first, firstl at the company domain.
- If a company pattern is already known, rank that format first and demote the rest.
- Deduplicate the generated candidates and drop rows with missing name or domain fields.
- Send each candidate to the verification API and record the status returned.
- Keep the first candidate marked valid per contact and discard the others.
- Flag contacts where only catch-all or risky results came back for manual review.
- Tally hit rate by pattern so future guesses start with the winning format.
Output
A CSV with one verified email per contact, a status column, and a summary of which patterns won most often.
Phone Number Format Standardizer
Normalize messy phone numbers into E.164 format and flag invalid or unreachable entries.
Requires LLM, Any spreadsheet
Purpose
Convert a column of inconsistent phone numbers into clean E.164 format so dialers and CRMs accept them.
Inputs
- CSV with raw phone column and a country or region column
- Default country code for rows missing region data
- List of country codes you actually sell into
Steps
- Read each raw value and strip spaces, dashes, parentheses, and letters.
- Detect country from the region column, or apply the default code when region is blank.
- Rebuild each number in E.164 form with the leading plus and country code.
- Flag entries that are too short, too long, or contain repeated placeholder digits like 000000.
- Mark rows outside your sell-into country list as out of scope.
- Deduplicate identical normalized numbers and keep the most complete contact row.
- Write a status column reading valid, invalid, or out_of_scope.
Output
The original file plus a normalized_phone column, a status column, and a short count summary of valid, invalid, and out of scope rows.
Role Title Seniority Normalizer
Map messy job titles into clean role and seniority buckets for consistent targeting and routing.
Requires Any LLM, Google Sheets
Purpose
Turn inconsistent raw job titles into standardized role and seniority buckets so filtering and routing stay accurate.
Inputs
- CSV of contacts with raw job title text
- Your target role buckets, for example Marketing, Sales, RevOps, Finance
- Your seniority tiers, for example IC, Manager, Director, VP, C-level
Steps
- Load the CSV and isolate the raw title column, trimming whitespace and dropping obvious noise like emojis or company names.
- For each title, classify it into one role bucket using your provided list, and mark Unknown when no clear match exists.
- Assign a seniority tier by scanning for signal words such as Head, Lead, Chief, Senior, and Founder.
- Flag ambiguous titles like Partner or Principal that need human review.
- Detect non-target titles and tag them for suppression.
- Write two new columns, role_bucket and seniority_tier, next to the original title.
- Produce a summary count per bucket and a list of Unknown titles.
Output
The enriched CSV plus a bucket distribution table and a review queue of unclassified titles.
Verify Catch-All Domain Risk
Flag catch-all domains in a list and route them to safer verification before sending.
Requires NeverBounce, LLM
Purpose
Identify catch-all domains in an email list so risky addresses get routed to a slower verification path instead of a normal send.
Inputs
- CSV of contacts with email and company domain
- Verification results from NeverBounce or similar
- Your accepted bounce rate threshold
Steps
- Run the full list through the verifier and pull the status field for every row.
- Group results by domain and count how many addresses on each domain return catch-all or accept-all status.
- Flag any domain where the catch-all share crosses your threshold as high risk.
- Split the list into three buckets: verified valid, catch-all risk, and hard invalid.
- For catch-all rows, tag them to hold for a low-volume test send before full rollout.
- Write a short note per risky domain explaining why it was held.
Output
Three labeled CSV segments plus a domain risk summary table showing catch-all percentage and recommended action per domain.
Other skill categories
The full library runs to 120 plays across 11 categories. The rest are here: