{ "generatedAt": "2026-05-20T16:49:00.675Z", "ready": true, "costReady": { "dataforseoStage1": true, "apifyStage2": true }, "costFile": "data/sources/budgets/source-acquisition-cost-plan.json", "currency": "GBP", "counts": { "checks": 12, "passing": 12, "blocked": 0 }, "estimates": { "dataforseoStage1": { "estimatedTotal": 0.075, "maxSpend": 5, "taskCount": 10, "reviewDepth": 100, "depthUnits": 10 }, "apifyStage2": { "estimatedTotal": 3, "maxSpend": 5, "actorRuns": 1, "targetCount": 3, "maxRequestsPerBrand": 100 } }, "guardrails": [ "This file is for local cost planning only; it does not call providers or store credentials.", "Use current provider pricing/source URLs when filling unit costs; do not guess pricing in code.", "Estimated total must fit the explicit max spend budget before approval/spend gates can unlock.", "Full-catalogue scraping is intentionally outside this cost plan." ], "checks": [ { "Provider": "DataForSEO", "Stage": "1", "Check": "Pricing source recorded", "Status": "pass", "Blocking": "yes", "Evidence": "https://dataforseo.com/apis/reviews-api/amazon-reviews-api checked 2026-05-19T13:30:32.762667Z" }, { "Provider": "DataForSEO", "Stage": "1", "Check": "Unit cost recorded", "Status": "pass", "Blocking": "yes", "Evidence": "GBP 0.00075 per task" }, { "Provider": "DataForSEO", "Stage": "1", "Check": "Estimate matches capped task count", "Status": "pass", "Blocking": "yes", "Evidence": "10 tasks / 10 expected; depth 100 / 100 expected" }, { "Provider": "DataForSEO", "Stage": "1", "Check": "Estimated total is positive", "Status": "pass", "Blocking": "yes", "Evidence": "GBP 0.075" }, { "Provider": "DataForSEO", "Stage": "1", "Check": "Estimated total fits max spend", "Status": "pass", "Blocking": "yes", "Evidence": "GBP 0.075 estimated / 5 max spend" }, { "Provider": "DataForSEO", "Stage": "1", "Check": "Hard stop preserved", "Status": "pass", "Blocking": "yes", "Evidence": "hardStopAfterFirstRun=true" }, { "Provider": "Apify", "Stage": "2", "Check": "Pricing source recorded", "Status": "pass", "Blocking": "yes", "Evidence": "https://apify.com/pricing checked 2026-05-20T16:41:55.103Z" }, { "Provider": "Apify", "Stage": "2", "Check": "Estimated actor run cost recorded", "Status": "pass", "Blocking": "yes", "Evidence": "GBP 3 per actor run" }, { "Provider": "Apify", "Stage": "2", "Check": "Estimate matches first-batch caps", "Status": "pass", "Blocking": "yes", "Evidence": "1 runs / 1; 3 targets / 3; 100 requests per brand / 100" }, { "Provider": "Apify", "Stage": "2", "Check": "Estimated total is positive", "Status": "pass", "Blocking": "yes", "Evidence": "GBP 3" }, { "Provider": "Apify", "Stage": "2", "Check": "Estimated total fits max spend", "Status": "pass", "Blocking": "yes", "Evidence": "GBP 3 estimated / 5 max spend" }, { "Provider": "Apify", "Stage": "2", "Check": "Hard stop preserved", "Status": "pass", "Blocking": "yes", "Evidence": "hardStopAfterFirstDataset=true" } ], "nextActions": [], "costPlan": { "currency": "GBP", "owner": "user-approved-top3-expanded-scrape-budget", "updatedAt": "2026-05-20T16:48:36.463Z", "notes": "Starter paid scrape lane reduced to GBP 3-5 equivalent first. Actual first run should stay under the tighter env caps below.", "dataforseoStage1": { "pricingSourceUrl": "https://dataforseo.com/apis/reviews-api/amazon-reviews-api", "pricingCheckedAt": "2026-05-19T13:30:32.762667Z", "unitCostPerTask": 0.00075, "taskCount": 10, "reviewDepth": 100, "estimatedTotal": 0.075, "maxSpendRef": 5, "hardStopAfterFirstRun": true, "notes": "Uses 100 review depth by default; scripts support DATAFORSEO_REVIEWS_DEPTH up to 1000 only with explicit env override." }, "apifyStage2": { "pricingSourceUrl": "https://apify.com/pricing", "pricingCheckedAt": "2026-05-20T16:41:55.103Z", "estimatedActorRunCost": 3, "actorRuns": 1, "targetCount": 3, "maxRequestsPerBrand": 100, "estimatedTotal": 3, "maxSpendRef": 5, "hardStopAfterFirstDataset": true, "notes": "First expanded budget allows 100 requests per brand/source; scripts support APIFY_REQUESTS_PER_BRAND up to 1000 only with explicit env override." } } }