
apify-buying-signal-detection
Set up a recurring buying-signal detection pipeline that finds companies showing buying intent across three signal types — job postings (hiring for the persona), fundraising events (recent raises), and LinkedIn content (pain-point posts, hiring announcements) — then aggregates results into a deduplicated leads.csv with the signal source, evidence URL, and detection timestamp per row. Split-schedule architecture — Apify Actor Tasks pull raw data on their own cadence, a Claude-side aggregation task normalizes, deduplicates against a blacklist, and appends new leads with a weekly-idempotent guard. Use when the user says "find companies with buying signals", "detect intent signals for outbound", "set up a weekly lead pipeline", "monitor hiring signals for lead gen", "track startup funding leads", "find LinkedIn buying signals", "schedule Apify Actors for prospecting", "build a signals-based lead list", or "set up buying-intent monitoring for my ICP".
- Installs
- 49
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/apify/awesome-skills --skill apify-buying-signal-detection- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads apify-buying-signal-detection automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Buying-Signal Detection
Turn an ICP description into a recurring pipeline that surfaces companies showing buying intent across three signal types — job postings, fundraising events, and LinkedIn content — and appends them to a single deduplicated leads.csv you can pipe straight into your CRM.
What this skill does (and what it deliberately does not)
This skill sets up and runs a scheduled workflow. It does not draft cold emails, score leads by fit, or push rows into a CRM. Its output is a clean, evidence-linked leads.csv — the input to whatever outreach process you already have. Cold outreach drafting for these leads is deliberately a separate concern (that's what apify-link-prospecting-outreach and similar skills exist for).
Three design commitments worth knowing before you start:
- The Apify side and the Claude side run on separate schedules. Apify runs the Actors on its own cron; Claude runs the aggregation on its own cron. Claude Code doesn't need to be up when the Actors run. This decoupling is what makes the pipeline actually recurring, not just "you have to remember to trigger it."
- Weekly idempotency is enforced at aggregation time. If the leads CSV already has an entry from the current ISO week, the aggregate script exits early with no HTTP calls made. The Claude-side schedule can fire more often than weekly (safety net) without cost impact.
- First-seen wins on dedup. A lead surfaced by the jobs signal on Monday stays a jobs-signal lead even if the same company shows up in the funding feed on Wednesday. The signal that first surfaced a company is the more useful one.
Prerequisites
- Apify account (sign up)
- Authentication via one of:
apify login(OAuth, if using the Apify CLI)APIFY_TOKENenvironment variable- Token from Apify Console → Settings → Integrations
- Python 3.10+ (for
scripts/aggregate.pyandscripts/setup_apify_tasks.py; only stdlib is required —requestsis used when available but has aurllibfallback) - Optional: a way to trigger the Claude-side aggregation on a schedule — the local
scheduled-tasksMCP is the recommended path when you're on Claude Code; cron / Task Scheduler / GitHub Actions all work too if you'd rather run it headlessly
Workflow
Copy this checklist and mark items done:
Task Progress:
- [ ] Step 1: Collect ICP inputs (block on these)
- [ ] Step 2: Write icp.json + blacklist.csv (if any)
- [ ] Step 3: Provision Apify Actor Tasks (setup_apify_tasks.py)
- [ ] Step 4: Verify Actor picks in the Apify Console
- [ ] Step 5: Register the Claude-side aggregation schedule
- [ ] Step 6: First manual run of aggregate.py — sanity check the output
Step 1: Collect ICP inputs (block on these)
Ask the user for all of the following before writing any file. The setup script needs every field to route correctly, and reworking a scheduled task after it's provisioned means either editing it in the Apify Console or re-running setup — both worse than asking once.
- Campaign name — a short slug (lowercase, dashes). Used as the prefix on every Apify Task name (e.g.
emea-saas-hiring-aes-bebity-linkedin-jobs-scraper). If the user already runs multiple campaigns, prevent collisions upfront. - Signals to track — subset of
["jobs", "funding", "linkedin_content"]. Rarely will a campaign want only one; the strength of the workflow is the intersection of signals per company. Recommend all three unless there's a specific cost concern. - Geo (ISO country codes) — uppercase two-letter codes. Drives regional Actor routing (Stepstone for DE/AT/BE, Seek for AU/NZ, France Travail for FR, Maddyness for FR-funding). Global campaigns should list every country the user actually sells into — passing
["US", "GB", "DE", "FR", "AU"]will fan out to five regional job Actors, which is 5× the weekly cost. Seereferences/gotchas.md. - Industry keywords — the category descriptor. Passed to funding trackers as
industry, to LinkedIn askeywordswhen no explicit content search terms are provided, and to job scrapers as a fallback when no persona titles are given. - Persona (if jobs signal enabled) — job titles the ICP hires for. Concrete titles beat categories:
"Account Executive","SDR","BDR"are hits;"sales"is noise. Optional seniority (entry,mid,senior,manager,director,vp,cxo) and company-size bands ("11-50", etc.) get applied post-hoc in the aggregator. - Funding config (if funding signal enabled) — stages (
seed,series_a,series_b, etc.) andmax_days_since_announcement(default 90). Fresh cash → open budget → tighter window is better. - LinkedIn content config (if linkedin_content signal enabled) — search phrases. This is the biggest quality lever; broad terms (
"sales") waste budget. Specific pain-point phrases beat category names — seereferences/actors.md. Plusmin_reactions(default 5) andposted_within_days(default 14) for post-filtering. - Where to store leads — path to a CSV file. Default
./leads.csvinside the campaign directory. This file is the pipeline's memory across runs; keep it under version control (or at least back it up) so the dedup guard survives disk resets. - Blacklist CSV path — optional. CSV with columns
domain,company,reason. Rows matching either the exact domain or the normalized company name get dropped before append. If the user doesn't have one, ask if they want to start with obvious exclusions (existing customers, their own domain, top competitors). - Schedule —
apify_side_cron(when Apify runs the Actors) andclaude_side_cron(when Claude aggregates). Default:0 6 * * 1(Apify Monday 06:00 UTC) and0 8 * * 1(Claude Monday 08:00 UTC). Two hours of buffer between them absorbs slow Actor runs.
The full schema is documented in references/icp-config-schema.md. A worked example lives at examples/icp.example.json.
Step 2: Write icp.json and blacklist.csv
Write the campaign directory contents:
<campaign-dir>/
icp.json ← the config from Step 1
blacklist.csv ← optional; columns: domain,company,reason
leads.csv ← created empty; the aggregator will populate it
Start leads.csv with just the header row (schema in references/csv-schema.md) so the aggregator doesn't have to handle a missing-file case on first run:
detected_at,company,domain,signal_type,signal_detail,signal_source_actor,signal_date,evidence_url,geo,notes
Step 3: Provision Apify Actor Tasks
Run the setup script:
APIFY_TOKEN=$APIFY_TOKEN \
python ${CLAUDE_PLUGIN_ROOT}/scripts/setup_apify_tasks.py \
--config ./icp.json
What this does:
- Reads
icp.jsonand picks Actors per the routing tables inreferences/actors.md— global Actors always, plus regional Actors matching the geo list. - For each pick, upserts an Apify Actor Task named
<campaign>-<actor-slug>with the input payload derived from the ICP. Re-running the script updates existing tasks in place; it does not create duplicates. - Writes a sidecar
<campaign-dir>/.<campaign-name>.tasks.jsonrecording the task IDs.aggregate.pyreads this to know which tasks to pull dataset items from. - If
schedule.apify_side_cronis set in the ICP (default is), creates or updates a single Apify Schedule that fires all the tasks on that cron.
Useful flags:
--dry-run— print the pick list and payloads without making any API calls. Always do this once when authoring a new campaign.--no-schedule— provision tasks but skip Schedule creation (useful when you want to trigger runs manually while calibrating).
Step 4: Verify Actor picks in the Apify Console
Open console.apify.com/actors/tasks. Filter by the campaign prefix. Sanity-check three things:
- The right Actors were picked — the regional ones (Stepstone / Seek / France Travail / Maddyness) fire only for the intended geos. If you see Seek but no ANZ country in the ICP, something's off.
- The input payload looks right — click each task, view its input JSON. Keywords, titles, and stages should be populated from the ICP; nothing should be
null. - The Apify Schedule is enabled — under Schedules, find
<campaign>-schedule, confirm it's on and lists every task.
If anything looks wrong, edit icp.json and re-run setup_apify_tasks.py — it's idempotent.
Step 5: Register the Claude-side aggregation schedule
Register a scheduled task that invokes the aggregator on the campaign's claude_side_cron. Pick whichever runner matches your environment:
Option A — scheduled-tasks MCP inside Claude Code. The MCP exposes mcp__scheduled-tasks__create_scheduled_task. The concrete call to make:
{
"name": "<campaign-name>-aggregate",
"cron_expression": "<value of schedule.claude_side_cron from icp.json>",
"timezone": "UTC",
"prompt": "Run the buying-signal aggregator. Execute exactly: python ${CLAUDE_PLUGIN_ROOT}/scripts/aggregate.py --config /abs/path/to/icp.json. Requires APIFY_TOKEN env var. On non-zero exit, surface the stderr in the notification body — do not attempt to reinterpret the error."
}
Substitute the real values for <campaign-name> and /abs/path/to/icp.json before making the call. Verify the task landed with mcp__scheduled-tasks__list_scheduled_tasks and confirm the cron matches icp.json.
Option B — headless cron / Task Scheduler / CI. Add a plain OS-level scheduler entry:
# Linux crontab entry
0 8 * * 1 APIFY_TOKEN=$APIFY_TOKEN /path/to/python /path/to/aggregate.py --config /path/to/icp.json >> /path/to/aggregate.log 2>&1
Or a GitHub Actions workflow (.github/workflows/aggregate.yml):
on:
schedule:
- cron: '0 8 * * 1'
jobs:
aggregate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: { python-version: '3.11' }
- env: { APIFY_TOKEN: '${{ secrets.APIFY_TOKEN }}' }
run: python scripts/aggregate.py --config icp.json
Either runner is safe to invoke more often than weekly — the weekly-idempotency guard skips runs that already have this-week entries. Use --force only during calibration.
Step 6: First manual run of aggregate.py
Before waiting for the schedule to fire, run once manually to confirm the wiring. This also seeds leads.csv so the week-guard has something to compare against next week:
APIFY_TOKEN=$APIFY_TOKEN \
python ${CLAUDE_PLUGIN_ROOT}/scripts/aggregate.py --config ./icp.json
Expected output shape:
{
"summary": {
"appended": 47,
"fetched_by_signal": {"jobs": 320, "funding": 88, "linkedin_content": 210},
"dropped": {"blacklist": 2, "dup_domain": 156, "dup_url": 401, "post_filter": 12, "unmappable": 0, "linkedin_no_domain": 8},
"linkedin_profile_lookups": 142,
"linkedin_profile_resolved": 134,
"linkedin_company_lookups": 118,
"linkedin_company_resolved": 112,
"linkedin_domain_resolved": 128
}
}
wrote 47 new rows to /abs/path/to/leads.csv
The linkedin_*_lookups / linkedin_*_resolved counters report each hop of
the LinkedIn author-domain enrichment chain (see below). linkedin_domain_resolved
is the count of LinkedIn rows whose domain column was successfully filled in.
linkedin_no_domain is the number of LinkedIn rows dropped because the chain
couldn't resolve a domain — those rows cannot be blacklisted or deduped safely.
If fetched_by_signal is all zeros, either the Apify tasks haven't run yet (check the Console) or the sidecar task registry is missing. Wait for the first Apify run to complete, then rerun.
Use --dry-run to see what would be appended without touching the CSV, and --force to bypass the weekly guard during calibration.
Actor routing
The full catalog with per-signal PICK rules lives in references/actors.md. Condensed summary:
| Signal | Global default | Regional additions |
|---|---|---|
| Jobs | bebity/linkedin-jobs-scraper, johnvc/google-jobs-scraper | Indeed (US/GB/IN/CA), Stepstone (DE/AT/BE), Seek (AU/NZ), France Travail (FR) |
| Funding | nexgendata/startup-funding-tracker, memo23/crunchbase-scraper, complex_intricate_networks/fundraising-and-startup-funding-scraper, signalbase/signalbase-api | Maddyness (FR) |
| LinkedIn content | harvestapi/linkedin-post-search (no cookies, $2/1k posts) | Deep-scrape fallback: curious_coder/linkedin-post-search-scraper (cookie required) |
LinkedIn author → company domain (enrichment, called on-demand from aggregate.py) | harvestapi/linkedin-profile-scraper ($4/1k profiles) + harvestapi/linkedin-company (per-lookup) — two hops | none — profile URL and company LinkedIn URL are the primary keys |
The routing logic in setup_apify_tasks.py::pick_actors mirrors this table — if you edit one, edit the other.
Why the LinkedIn enrichment runs on-demand, not scheduled — and why it's a two-hop chain
harvestapi/linkedin-post-search returns the author's name and headline but not the employer's website. Without a domain, the aggregator cannot check the blacklist or dedup against previously seen companies for this signal — meaning blacklisted competitors could slip in via LinkedIn posts.
Resolving that domain takes two additional Actor calls, chained inside aggregate.py::enrich_linkedin_domains:
harvestapi/linkedin-profile-scraperon the deduplicated set of author profile URLs whose post rows came back without a domain. ReturnscurrentPosition[0].companyLinkedinUrlandcompanyName— but not the company website. Input:{profileScraperMode: "Profile details no email ($4 per 1k)", urls: [...]}.harvestapi/linkedin-companyon the deduplicated set of company LinkedIn URLs returned by step 1. Returnswebsite. Input:{companies: [...]}.
The chain is the aggregator's only synchronous Actor call path — all other data comes from pre-scheduled Task runs. It's the deliberate exception because both enrichment inputs (author profile URLs, then company URLs) can only be known after the previous hop's dataset is read.
Cost.
- Profile scraping: $4 per 1000 profiles (chose the "no email" tier — email lookup isn't needed for domain resolution)
- Company scraping: pay-per-event on
harvestapi/linkedin-company - Combined effect: for a campaign of 500 LinkedIn posts averaging 3 posts/author, expect ~170 profile lookups + ~150 company lookups (many authors work at the same company)
Three knobs bound the cost:
- Canonical profile URL dedup — N posts by the same author cost one profile lookup (
canonical_linkedin_profile_urlstrips?miniProfileUrn=…so the same author across sample posts collapses to one key) - Company-URL dedup at the company-scraper hop — N authors at the same company cost one company lookup
- The whole pass is skipped entirely when every LinkedIn row already has a domain
Calling Actors — choose your interface
setup_apify_tasks.py uses the Apify REST API directly (no Actor call — it provisions Tasks and Schedules). aggregate.py uses the REST API to pull dataset items from the last successful run of each task. If you want to trigger an Actor manually during troubleshooting (e.g. Step 4 verification), use one of these:
Option A: Apify CLI (recommended for portability)
Three flags on every call (--json, --user-agent, 2>/dev/null):
# Manually trigger one campaign task
apify tasks run <task-id> --wait 300 \
--json \
--user-agent apify-awesome-skills/apify-buying-signal-detection \
2>/dev/null
# List tasks provisioned for this campaign
apify tasks list --json 2>/dev/null | \
jq '.[] | select(.name | startswith("<campaign-name>-"))'
# Peek at the latest dataset for a task
apify tasks last-run <task-id> --dataset --format json \
--user-agent apify-awesome-skills/apify-buying-signal-detection 2>/dev/null
# Fetch an Actor's input schema (when you're deciding whether to add it to the routing table)
apify actors info "<actor-id>" --input --json \
--user-agent apify-awesome-skills/apify-buying-signal-detection 2>/dev/null
Option B: Apify MCP connector
Hosted MCP server at mcp.apify.com. Full docs at docs.apify.com/platform/integrations/mcp.
Option C: MCP client of your choice (e.g. mcpc)
Standalone CLI client. See github.com/apify/mcpc.
Troubleshooting
| Error / symptom | What to do |
|---|---|
APIFY_TOKEN not found | export APIFY_TOKEN=$(cat ~/.apify_token) or add to .env. Get one at console.apify.com/account/integrations. |
no task registry for campaign '<name>' | You ran aggregate.py before setup_apify_tasks.py. Run setup first — it writes the sidecar the aggregator needs. |
skipped: already run this week on a legitimate re-run | Pass --force. The guard preserves the week's entries and dedupes on top; it does not overwrite. |
Task runs on Apify but aggregate.py reports "fetched_by_signal": {"jobs": 0} | The Actor ran but returned zero items. Check the Actor's run log for schema errors (wrong keyword format, unsupported country code). Post-fix, run the task manually via apify tasks run and re-aggregate. |
| Tasks provisioned but no data ever lands | The Apify Schedule may be disabled. In the Console, open Schedules → <campaign>-schedule and confirm it's enabled. Also check the schedule's cron matches your timezone assumption — schedules are in UTC unless you set timezone. |
| Costs higher than expected | See references/gotchas.md#cost-guardrails. Most common cause: broad LinkedIn search terms multiplying harvestapi/linkedin-post-search cost. Second-most-common: adding all regional job Actors when the ICP only really sells into two countries. |
| Reposts inflate LinkedIn signal counts | The aggregator strips trackingId and utm_* query params to canonicalize URLs before dedup, but LinkedIn's URL scheme changes periodically. If you see the same post appearing twice, check whether the URLs differ only in a param not in the strip list and add it to strip_tracking() in aggregate.py. |
| Duplicate leads after a company rebrand | Dedup is domain-first. If a company changes domains, the aggregator treats it as a new lead. Manual reconciliation only — no automatic fix. |
Multiple machines writing the same leads.csv | Not supported. Single-writer assumption. Put the CSV behind a locking layer (Google Sheets export, flock, etc.) or partition per machine. |
FAQ
What does the apify-buying-signal-detection skill do?
Set up a recurring buying-signal detection pipeline that finds companies showing buying intent across three signal types — job postings (hiring for the persona), fundraising events (recent raises), and LinkedIn content (pain-point posts, hiring announcements) — then aggregates results into a deduplicated leads.csv with the signal source, evidence URL, and detection timestamp per row. Split-schedule architecture — Apify Actor Tasks pull raw data on their own cadence, a Claude-side aggregation task normalizes, deduplicates against a blacklist, and appends new leads with a weekly-idempotent guard. Use when the user says "find companies with buying signals", "detect intent signals for outbound", "set up a weekly lead pipeline", "monitor hiring signals for lead gen", "track startup funding leads", "find LinkedIn buying signals", "schedule Apify Actors for prospecting", "build a signals-based lead list", or "set up buying-intent monitoring for my ICP".
How do I install apify-buying-signal-detection?
Run npx skills add https://github.com/apify/awesome-skills --skill apify-buying-signal-detection in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/apify-buying-signal-detection/ (personal) or .claude/skills/apify-buying-signal-detection/ (project).
Which AI agents can use apify-buying-signal-detection?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is apify-buying-signal-detection safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains apify-buying-signal-detection?
It is published by apify in apify/awesome-skills. It has 49 recorded installs.
More from apify/awesome-skills
apify-ecommerce
apify/awesome-skills
Scrape e-commerce data for pricing, reviews, bestsellers, and seller discovery across 30+ platforms including Amazon, Walmart, eBay, Shopify, WooCommerce, and more. Use when user asks about product prices, competitor analysis, store scraping, tech stack detection, food delivery, real estate, or marketplace intelligence.
apify-easy-competitive-intelligence
apify/awesome-skills
Open the skill to read its SKILL.md instructions.
apify-verified-email-finder
apify/awesome-skills
Builds a list of verified business emails from Google Maps, Google SERPs, or a user-supplied URL list. Verification happens inside the same Apify run — no third-party verifier needed. Use when user asks to find verified emails, build a leads list, scrape emails from Maps or SERP, verify emails for a URL list, or find an Apollo / Hunter alternative.
apify-ads-intelligence
apify/awesome-skills
Research, spy on, and analyze ads across Meta (Facebook & Instagram), Google (Ads Transparency Center + paid search results), TikTok (Ads Library + Creative Center), LinkedIn Ad Library, and X (Twitter — promoted tweets, best-effort) using Apify Actors. Use when user asks about competitor ads, ad library research, winning creatives, ad copy analysis, landing page audits from ads, cross-platform ad audits, brand transparency checks, or any task involving paid ad creatives, advertiser data, or ad targeting from public ad libraries.
apify-link-prospecting-outreach
apify/awesome-skills
Find sites ranking for target keywords, score every prospect with Ahrefs domain authority and page-level traffic, identify the strongest pitch angle per row ("links to competitor", "mentions brand without linking", "top-3 SERP", "resource page", "outdated content"), generate brand-voice-matched outreach emails using an outreach-type-aware template (unlinked-mention claim, competitor-link replacement, resource-page inclusion, outdated-content replacement, topical niche-edit), and propose a concrete in-article link placement as three artifacts — the verbatim source sentence, the same sentence rewritten with the link spliced in, or a fully-drafted new insertion if no natural fit exists. Use when user asks to find link building opportunities, prospect link partners, recover unlinked brand mentions, replace competitor links, build a tiered outreach list, or run cold email outreach for SEO link building.
apify-ai-search-visibility-tracker
apify/awesome-skills
Track whether a brand and its competitors get cited or mentioned across Google AI Overviews, Google AI Mode, ChatGPT Search, Perplexity, Microsoft Copilot, and Google Gemini for a defined set of prompts, on a recurring schedule. Use when user asks to track AI visibility, monitor brand mentions in AI search, track ChatGPT citations, do AI search SEO tracking, GEO tracking (Generative Engine Optimization), AEO tracking (Answer Engine Optimization), monitor Perplexity citations, track AI Overviews mentions, see if their brand shows up in AI search, discover which prompts competitors rank for in AI search, find citation opportunities, or audit a website for AI visibility readiness.
Popular business & finance skills
sales-enablement
coreyhaines31/marketingskills
When the user wants to create sales collateral, pitch decks, one-pagers, objection handling docs, or demo scripts. Also use when the user mentions 'sales deck,' 'pitch deck,' 'one-pager,' 'leave-behind,' 'objection handling,' 'deal-specific ROI analysis,' 'demo script,' 'talk track,' 'sales playbook,' 'proposal template,' 'buyer persona card,' 'battle card,' 'battlecard,' 'competitive one-pager,' 'win-loss analysis,' 'why are we losing deals,' 'loss reasons,' 'how do I respond to this objection,' 'prospect just said,' 'help my sales team,' 'sales materials,' or 'what should I give my sales reps,' 'cold call script,' or 'voicemail script.' Use this for any document or asset that helps a sales team close deals. For public competitor comparison pages, see competitors. For running buyer interviews or churn research, see customer-research. For marketing website copy, see copywriting. For cold outreach emails, see cold-email. For the offer being sold (bonuses, guarantees, pricing structure),
revops
coreyhaines31/marketingskills
When the user wants help with revenue operations, lead lifecycle management, or marketing-to-sales handoff processes. Also use when the user mentions 'RevOps,' 'revenue operations,' 'lead scoring,' 'outbound pipeline stages,' 'lead routing,' 'MQL,' 'SQL,' 'pipeline stages,' 'deal desk,' 'CRM automation,' 'marketing-to-sales handoff,' 'data hygiene,' 'leads aren't getting to sales,' 'pipeline management,' 'lead qualification,' or 'when should marketing hand off to sales.' Use this for anything involving the systems and processes that connect marketing to revenue. For cold outreach emails, see cold-email. For email drip campaigns, see emails. For pricing decisions, see pricing.
sales-funnel-blueprint
autonnel/autonnel-skills
Turn an offer into a concrete multi-step sales funnel spec - page-by-page structure, price ladder, copy outline and the metrics each step must hit. Use when asked to build a sales funnel, marketing funnel, landing page flow, lead magnet funnel, webinar funnel, tripwire or VSL funnel, when planning a product launch page flow, or when someone asks "what pages do I need" for selling something online.
pricing
coreyhaines31/marketingskills
When the user wants help with pricing decisions, packaging, or monetization strategy. Also use when the user mentions 'pricing,' 'pricing tiers,' 'freemium,' 'free trial,' 'packaging,' 'price increase,' 'value metric,' 'Van Westendorp,' 'willingness to pay,' 'monetization,' 'how much should I charge,' 'my pricing is wrong,' 'pricing page,' 'annual vs monthly,' 'per seat pricing,' 'should I offer a free plan,' 'pricing page teardown,' 'pricing page audit,' 'is my pricing page AI-readable,' or 'can AI read my pricing.' Use this whenever someone is figuring out what to charge, how to structure their plans, or wants to audit a pricing page (for humans and for the AI agents that shortlist tools). For in-app upgrade screens, see paywalls. For offer construction (bonuses, guarantees, value framing, naming) on services/courses/coaching/high-ticket B2B, see offers.
cross-border-ecommerce
nexscope-ai/ecommerce-skills
Cross-border e-commerce expansion advisor. Scores target markets on 8 weighted dimensions (market size, ecommerce penetration, competition, regulatory complexity, logistics infrastructure, payment ecosystem, cultural distance, IP protection), compares 5 fulfillment models with cost and transit data, provides country-by-country tax/duty compliance guides (EU VAT/IOSS, UK VAT, US sales tax, CA GST, AU GST, JP consumption tax), maps local payment preferences by market, and builds a phased expansion roadmap. No API key required.
pricing-strategy
coreyhaines31/marketingskills
When the user wants help with pricing decisions, packaging, or monetization strategy. Also use when the user mentions 'pricing,' 'pricing tiers,' 'freemium,' 'free trial,' 'packaging,' 'price increase,' 'value metric,' 'Van Westendorp,' 'willingness to pay,' 'monetization,' 'how much should I charge,' 'my pricing is wrong,' 'pricing page,' 'annual vs monthly,' 'per seat pricing,' or 'should I offer a free plan.' Use this whenever someone is figuring out what to charge or how to structure their plans. For in-app upgrade screens, see paywall-upgrade-cro.