find_offer_url
Locate the BEST specific landing-page URL for a marketing offer on a given domain.
Read campaigns
Returns data. Calling it changes nothing, so it is safe in an unattended loop.
What it does
Locate the BEST specific landing-page URL for a marketing offer on a given domain.
Runs three discovery strategies in parallel:
1. Direct path probe — conventional paths per offer_type (e.g. /request-demo, /case-studies, /roi-calculator)
2. Sitemap scan — <loc> entries filtered by offer-type keywords + optional topic
3. Footer/body scrape — CTA/nav links matching the offer intent
Candidates are scored by specificity. Generic hub pages (/resources/, /content/, /library/, homepages)
are HARD REJECTED — this tool exists precisely to avoid shipping them.
USE THIS BEFORE create_update_offer WHENEVER offer_type = "Landing Page"
AND the user did NOT provide an explicit URL.
Do NOT guess a URL. Do NOT rely on web_search for landing pages — this tool is more reliable.
USER-PROVIDED URL OVERRIDE (HARD RULE):
If the user already specified a landing-page URL in their request (e.g. "use
https://acme.com/demo-fintech" or "point offers at our pricing page"), DO NOT
call find_offer_url — use the user's URL verbatim in create_update_offer.
Never overwrite an explicit user-provided URL, even if it looks generic.
WHEN TO USE:
- Before every create_update_offer call with offer_type="Landing Page"
- When you need a specific demo / case-study / whitepaper / ROI calculator / guide URL
- When web_search returned only generic /resources/ or homepage URLs
FALLBACK BEHAVIOR:
- On success: use `offer_url` verbatim in create_update_offer.landingPageUrl
- On success=false: DO NOT create a Landing Page offer. Switch to offer_type="Lead Gen" instead.
RETURNS:
{
"success": true,
"domain": "snowflake.com",
"offer_type": "case_study",
"topic": "fintech",
"offer_url": "https://www.snowflake.com/customers/square/",
"source": "sitemap",
"link_text": "Square",
"score": 95,
"steps_tried": ["direct-probe", "sitemap", "footer-scrape"],
"candidate_count": 42
}
On failure: { "success": false, "suggestion": "Switch offer_type to 'Lead Gen'..." }
EXAMPLES:
- find_offer_url(domain="snowflake.com", offer_type="case_study", topic="fintech")
- find_offer_url(domain="servicenow.com", offer_type="demo")
- find_offer_url(domain="mongodb.com", offer_type="roi_calculator")Arguments
| Argument | Type | Notes | |
|---|---|---|---|
domain |
string | required | Company website URL or domain. Examples: 'snowflake.com', 'www.servicenow.com' |
offer_type |
string | required | Type of offer content to locate. Drives which paths are probed and which keywords score higher. one of: case_study, demo, whitepaper, roi_calculator, guide, report, ebook, webinar |
topic |
string | Optional topic keywords to bias scoring (e.g., 'fintech', 'servicenow integration', 'data warehousing'). Improves hit rate when the domain has many offers of the same type. |
Request
curl
curl -s -X POST https://mcp-server.metadata.io/mcp \
-H "Authorization: $METADATA_PAT" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"find_offer_url","arguments":{"domain":"<domain>","offer_type":"case_study"}}}'
Response
Recorded with these arguments. Enum values are the first the tool's own schema
declares; ids were fetched live from a list_ call immediately before.
arguments used
{
"domain": "metadata.io",
"offer_type": "case_study"
}
Real, from the production server, in 1817 ms. Values that identify a customer or disclose money are replaced with typed placeholders; keys, types and nesting are exactly as returned.
recorded response
{
"domain": "[domain redacted]",
"offer_type": "case_study",
"topic": null,
"offer_url": null,
"source": null,
"link_text": null,
"score": null,
"steps_tried": [
"direct-probe",
"sitemap",
"footer-scrape"
],
"candidate_count": 4,
"success": false,
"suggestion": "[suggestion redacted]"
}
Related
Other campaigns tools: