Capability · pricing.check
SaaS Pricing: What plans and prices appear on official pricing pages?
Question & workflow
- Question
- What plans and prices appear on official pricing pages?
- What comes back
- Observed plan names and displayed prices with source and coverage.
- Use case
- Source-backed pricing snapshots for competitive research and change comparisons.
Ideal workflow
- Supply one company website (company_website).
- Inspect the Actor for free (metadata, pricing, schemas) — no run, no token.
- Get spending authorization for one call capped at $0.02 (maxTotalChargeUsd: 0.02).
- Start one run in your own Apify account; save the run ID.
- Poll that same run, then read the one-item dataset or the OUTPUT record.
- Validate the report against report.schema.json and act on status before using findings.
Input
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
| company_website | string | Required | required, string | Public SaaS company domain or HTTPS URL, for example linear.app. |
| pricing_url | string | Optional | optional, string | Public pricing page on the same registrable company domain. If omitted, the Actor follows a pricing link on the homepage or tries /pricing. |
{
"company_website": "https://calendly.com/"
}
Download input_schema.json — the verbatim Actor input schema. Run limits (build, memory, timeout, maxTotalChargeUsd) are call options, never input fields.
Output
One report per run, written to the run’s default dataset (one item) and to the OUTPUT record of its key-value store. Check status before using any findings.
21 top-level fields, read from report.schema.json (JSON Schema draft-07).
| Field | Type | Required | Constraints |
|---|---|---|---|
| schema_version | const "1.0" | Required | — |
| company_website | null | string | Required | — |
| pricing_url | null | string | Required | — |
| status | enum | Required | one of: verified, partial, unknown, invalid_input |
| plan_count | integer | Required | ≥ 0 |
| plans | array of object | Required | — |
| ambiguous_cards | integer | Required | — |
| coverage_complete | boolean | Required | — |
| checked_urls | array of string | Required | — |
| source_errors | array of object | Required | — |
| checked_at | string | Required | format date-time |
| completed_at | string | Required | format date-time |
| coverage_scope | string | Required | — |
| error_code | null | string | Required | — |
| error_message | null | string | Required | — |
| http_request_count | integer | Required | ≥ 0 |
| downloaded_bytes | integer | Required | ≥ 0 |
| duration_ms | integer | Required | ≥ 0 |
| billing_event | string | null | Required | — |
| billing_quantity | integer | Required | 0–1 |
| report_id | string | Required | pattern ^[a-f0-9]{64}$ |
- report.schema.json — verbatim report schema
- input_schema.json — verbatim input schema
- saas-pricing.json — full recorded example report with provenance
- saas-pricing.md — public Markdown doc for agents
Recorded example
Recorded example — observed 2026-10-08 11:45 UTC · owner-funded release test · not an independent purchase
This explorer shows only the recorded report below. It does not accept a domain and does not check anything; a new check happens only when you run the Actor in your own Apify account.
SaaS Pricing report — Calendly
status: verified (Verified)- Subject
- Calendly
- Observed
- Run ID
- GlwOtw5pbHiP4u2PX
- Build
- 0.2.3 (build ID fbB0XdDfHDC5cobhB)
- Report SHA-256
- 53977266aa1fca4d2dec9b8b272e5f71af06aadf9f568724a1b4039f704c9ec3
- company_website
- https://calendly.com/
- pricing_url
- https://calendly.com/pricing
- plan_count
- 3
- ambiguous_cards
- 0
- coverage_complete
- false
- coverage_scope
- One public company website and up to three same-company pricing URLs; static HTML only.
Plans (3)
| plan_name | price_text | price_type | billing_period | Evidence |
|---|---|---|---|---|
| Free | Free | free | null | |
|
Evidence — row 1 plans
|
||||
| Standard | $10 | numeric | month | |
|
Evidence — row 2 plans
|
||||
| Teams | $16 | numeric | month | |
|
Evidence — row 3 plans
|
||||
Sources checked (2)
From checked_urls in the report. A source listed here was fetched during the recorded run; the report covers these sources only, not the whole web.
Reports may precede final event charging; their billing fields alone do not establish a settled debit.
Show the full raw report JSON
{
"schema_version": "1.0",
"company_website": "https://calendly.com/",
"pricing_url": "https://calendly.com/pricing",
"status": "verified",
"plan_count": 3,
"plans": [
{
"plan_name": "Free",
"price_text": "Free",
"price_type": "free",
"currency_marker": null,
"billing_period": null,
"billing_note": null,
"source_url": "https://calendly.com/pricing",
"checked_at": "2026-10-08T11:45:12.774Z",
"evidence_text": "FreeAlways freeGet started",
"evidence_sha256": "dea308e80e37727db7672a246a299017f88056a316824ceba8f582abc6656c85",
"extraction_method": "semantic_card"
},
{
"plan_name": "Standard",
"price_text": "$10",
"price_type": "numeric",
"currency_marker": "$",
"billing_period": "month",
"billing_note": "Page billing controls mention billed yearly / billed monthly; active selection was not verified.",
"source_url": "https://calendly.com/pricing",
"checked_at": "2026-10-08T11:45:12.774Z",
"evidence_text": "StandardAdd Notetaker & Callie$10/seat/moSeats are required for users to connect calendars and host Calendly meetings - meeting invitees do not require a seat.Save 17%Get started [Page billing controls: billed yearly / billed monthly]",
"evidence_sha256": "dea308e80e37727db7672a246a299017f88056a316824ceba8f582abc6656c85",
"extraction_method": "semantic_card"
},
{
"plan_name": "Teams",
"price_text": "$16",
"price_type": "numeric",
"currency_marker": "$",
"billing_period": "month",
"billing_note": "Page billing controls mention billed yearly / billed monthly; active selection was not verified.",
"source_url": "https://calendly.com/pricing",
"checked_at": "2026-10-08T11:45:12.774Z",
"evidence_text": "TeamsAdd Notetaker & Callie$16/seat/moSeats are required for users to connect calendars and create Calendly links to help book meetings - meeting invitees do not require an account or seat.Save 20%Get started [Page billing controls: billed yearly / billed monthly]",
"evidence_sha256": "dea308e80e37727db7672a246a299017f88056a316824ceba8f582abc6656c85",
"extraction_method": "semantic_card"
}
],
"ambiguous_cards": 0,
"coverage_complete": false,
"checked_urls": [
"https://calendly.com/",
"https://calendly.com/pricing"
],
"source_errors": [],
"checked_at": "2026-10-08T11:45:12.424Z",
"completed_at": "2026-10-08T11:45:13.053Z",
"coverage_scope": "One public company website and up to three same-company pricing URLs; static HTML only.",
"error_code": null,
"error_message": null,
"http_request_count": 3,
"downloaded_bytes": 2058390,
"duration_ms": 629,
"billing_event": null,
"billing_quantity": 0,
"report_id": "e507bfa93369e19a46ff12f66c5ac48f191e8b4d682a1f206b6f85aa65ce5b1e"
}
Download saas-pricing.json — this report plus provenance (input used, run, build, owner-funded flag).
Other recorded examples: Hiring Signals · Contact & Booking · Retail Availability · Customer Proof · Partner Programs · Integration Evidence
Evidence & limits
- Verification scope
- A plan and displayed price are associated in the same checked source. Currency symbols and billing periods are preserved as stated.
- Coverage limits
- Static extraction is not an exhaustive catalog. Regional prices, tax, discounts, add-ons and dynamic widgets may remain unknown. Do not infer an ISO currency from a symbol.
- Request bounds
- 8 requests, 8 MB total, 3 MB per page, 35-second network budget.
How sources are acquired, dated, hashed and verified — and the four evidence classes (local fixtures, owner-funded cloud tests, read-only metadata checks, independent customer results) — are on Evidence & methodology.
Actor & build
- Actor
- impressionable_lupine/verified-saas-pricing
- Actor ID
- FqG15P6FbSTh0QPqq
- Default build
- 0.2.3
- Pricing model
- PAY_PER_EVENT · event verified-pricing-report · $0.02 · max 1 event per run
- Platform usage
- Standard Actor platform usage included under the configuration checked on 8 Oct 2026; recheck before purchase.
- Apify Store
- apify.com/impressionable_lupine/verified-saas-pricing
Inspect without purchase
Both of these read public metadata only. They do not start a run and need no token.
{
"name": "fetch-actor-details",
"arguments": {
"actor": "impressionable_lupine/verified-saas-pricing",
"output": {
"pricing": true,
"inputSchema": true,
"outputSchema": true,
"metadata": true,
"readme": true
}
}
}
# Free, read-only: public Actor metadata (pricing, builds). Does not start a run.
curl "https://api.apify.com/v2/acts/FqG15P6FbSTh0QPqq"
Price & charge trigger
- Event
- Verified pricing report (verified-pricing-report)
- Charge trigger
- One event for verified plans (including explicit free plans) or a supported partial positive.
- No event when
- unknown and invalid_input produce no event.
- Example cost
- One call with
maxTotalChargeUsd: 0.02→ at most $0.02 in Actor events. - Platform usage
- Standard Actor platform usage included under the configuration checked on 8 Oct 2026; recheck before purchase.
- Store text
- “Charged once for a report containing source-checked public SaaS plan prices. Unknown results are free.” (verbatim, Apify Store)
Caps are not discounts and do not guarantee a positive result. Unknown/invalid checks produce no eligible report event; caller model/workflow costs are separate.
Example cost: one call, max $0.02 in Actor events. Caller model and workflow costs (your agent, your LLM) are separate and not included. Reports may precede final event charging; their billing fields alone do not establish a settled debit.
Unknown & partial
Statuses are part of the answer. An unknown result is not a negative, and a scoped negative covers only the checked sources. unknown and invalid_input produce no event.
| Status | Meaning | Report event |
|---|---|---|
| verified | Plans and displayed prices associated in the same checked source (including explicit free plans). | Yes — one event |
| partial | Supported partial positive: some plans or prices verified, others ambiguous or missing. | Yes — one event |
| unknown | No plan–price association could be verified in the checked sources. | No event |
| invalid_input | Fix the caller input (for example, a pricing URL on a different domain). | No event |
When to choose
- Choose it when
- Source-backed pricing snapshots for competitive research and change comparisons.
- Simpler alternative
- If you only need to read one pricing page once, open it directly. Choose this when you need a dated, source-hashed snapshot in JSON for comparison.
Do not choose it for
- Exhaustive plans from dynamic pricing widgets
- Checkout totals, taxes, negotiated quotes or plan entitlement
- Proving a pricing change without a previous observation
No discovery of companies, people identity/deliverability verification, proof of buying intent, outreach, top-ups, subscriptions or recurring purchases. Which capability fits my task?
Start with one company
-
1 · Inspect (free, no token, no run) # Free, read-only: public Actor metadata (pricing, builds). Does not start a run. curl "https://api.apify.com/v2/acts/FqG15P6FbSTh0QPqq" -
2 · Start one run — only after spending is authorized # Paid run in YOUR Apify account. Only after spending is authorized. # Set APIFY_TOKEN securely in your client/shell; never paste it into URLs or shared files. curl -X POST "https://api.apify.com/v2/acts/FqG15P6FbSTh0QPqq/runs?build=0.2.3&memory=512&timeout=60&maxTotalChargeUsd=0.02&waitForFinish=30" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"company_website":"https://calendly.com/"}'Limits are query parameters: build 0.2.3, memory 512 MB, timeout 60 s, maxTotalChargeUsd=0.02.
-
3 · Poll the same run # Save data.id (run ID) from the first response. On timeout/ambiguity, poll THIS run. # Never start a second charged run to recover output. curl "https://api.apify.com/v2/actor-runs/$RUN_ID" \ -H "Authorization: Bearer $APIFY_TOKEN" -
4 · Get the report (dataset items) # data.defaultDatasetId from the run object (one report item). curl "https://api.apify.com/v2/datasets/$DATASET_ID/items?format=json&clean=true" \ -H "Authorization: Bearer $APIFY_TOKEN"4b · Or the OUTPUT record # Alternative: data.defaultKeyValueStoreId → OUTPUT record. curl "https://api.apify.com/v2/key-value-stores/$KV_STORE_ID/records/OUTPUT" \ -H "Authorization: Bearer $APIFY_TOKEN"
Recovery: Save the run ID from the first response; on timeout or ambiguous response, poll that same run; never start a second charged run to recover output.
Hosted MCP server https://mcp.apify.com. Anonymous (no token) inspection is allowed only when ?tools= is limited to search-actors, fetch-actor-details, search-apify-docs and fetch-apify-docs.
No live MCP execution of these call-actor templates has been performed by anyone, owner or independent; they were validated offline against the tool schemas and current metadata, and the recorded examples came from Apify SDK/API runs.
-
1 · Inspect: fetch-actor-details (free; works on the anonymous inspection endpoint) { "name": "fetch-actor-details", "arguments": { "actor": "impressionable_lupine/verified-saas-pricing", "output": { "pricing": true, "inputSchema": true, "outputSchema": true, "metadata": true, "readme": true } } }Client config for anonymous inspection
Inspection only (no token) { "mcpServers": { "apify-inspect": { "url": "https://mcp.apify.com?tools=search-actors,fetch-actor-details" } } } -
2 · call-actor — only after spending is authorized (limits in callOptions, never in input) { "name": "call-actor", "arguments": { "actor": "impressionable_lupine/verified-saas-pricing", "input": { "company_website": "https://calendly.com/" }, "waitSecs": 30, "callOptions": { "build": "0.2.3", "memory": 512, "timeout": 60, "maxTotalChargeUsd": 0.02 } } }Client config for execution (your own authentication)
OAuth (recommended; browser sign-in, no token in config) { "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=actors,runs,storage" } } }Bearer header (set the token securely in your client) { "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=actors,runs,storage", "headers": { "Authorization": "Bearer <APIFY_TOKEN>" } } } } -
3 · Poll the same run { "name": "get-actor-run", "arguments": { "runId": "<runId returned by call-actor>" } } -
4 · Get the report (dataset items) { "name": "get-dataset-items", "arguments": { "datasetId": "<datasetId returned by call-actor>", "clean": true } }4b · Or the OUTPUT record { "name": "get-key-value-store-record", "arguments": { "keyValueStoreId": "<keyValueStoreId returned by call-actor>", "recordKey": "OUTPUT" } }
Recovery: Save the run ID from the first response; on timeout or ambiguous response, poll that same run; never start a second charged run to recover output. call-actor returns the run status and storage IDs (the IDs are under storages in call-actor’s structured result), not the items.
Last verification
Last metadata verification: 8 Oct 2026 ().
A read-only, anonymous GET https://api.apify.com/v2/acts/FqG15P6FbSTh0QPqq confirmed the public Actor, its default build 0.2.3 and its pay-per-event pricing (verified-pricing-report, $0.02). That check started no run and is not continuous monitoring. Last checked 2026-10-08T12:16:53.713706+00:00; recheck the Apify Store page before purchase.