056c47581f
Ships the second dashboard surface — a Pattern Library + Preview Theatre — that presents the 4-section PDP pilot batch back to Umar, compliance, and the board in an editorial format. Adds the full data layer that drives it: 5 source-backed per-SKU drafts at QA 100/100, 15 competitor PDP semantic extracts, PubMed evidence packs, EFSA claims library extension, JV brand voice guide, hand-curated product FAQs, and the Matrixify-ready CSV exports for Lewis. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
352 lines
19 KiB
JSON
352 lines
19 KiB
JSON
{
|
|
"generatedAt": "2026-05-20T02:31:33.790Z",
|
|
"ready": false,
|
|
"recommendation": "Use DataForSEO first for a tightly capped structured pilot; use Apify only as a targeted gap-filler after inspecting pilot output.",
|
|
"currentInstruction": "Do not broaden spend. 6 DataForSEO payload rows are ready from live-confirmed ASINs; 4 ASINs remain unresolved and must stay out of the payload unless exact evidence is found.",
|
|
"counts": {
|
|
"actions": 13,
|
|
"open": 13,
|
|
"immediate": 5,
|
|
"blockedPaidActions": 5,
|
|
"missingAsins": 4,
|
|
"confirmedAsins": 6,
|
|
"confirmedPromotionCandidates": 0,
|
|
"webLookupAids": 4,
|
|
"webRejected": 2,
|
|
"unresolvedKeepOut": 4,
|
|
"promotedAsins": 0,
|
|
"readyTasks": 6,
|
|
"productSearchResultItems": 575,
|
|
"reviewPilotTasks": 0,
|
|
"reviewPilotReviews": 0,
|
|
"reviewsDocsUnavailable": true,
|
|
"supportEscalationReady": true,
|
|
"supportResponsePassing": 3,
|
|
"supportResponseChecks": 6,
|
|
"approvalRequestReadyChecks": 2,
|
|
"approvalRequestChecks": 6,
|
|
"manualAmazonCaptureTargets": 6,
|
|
"manualAmazonCaptureFilesPresent": 0,
|
|
"manualAmazonCaptureFilesValid": 0,
|
|
"manualAmazonCaptureReviews": 0,
|
|
"convertedReviews": 0
|
|
},
|
|
"asinExamples": [
|
|
"JV-D1000 (Vitamin D Effervescent Tablets - 1000iu)",
|
|
"JV-D4000 (Super Strength Vitamin D3 4000iu)",
|
|
"JV-TURMERIC500 (Turmeric with BioPerine (Black Pepper Extract))",
|
|
"JV-VISISOFT (Visisoft Original Tablets - 10mg)",
|
|
"JV-STAR1000 (High Strength Starflower Oil 1000mg)",
|
|
"JV-COQ10100 (Co-Enzyme Q10 120mg)",
|
|
"JV-B12 (Methylcobalamin Vitamin B12)",
|
|
"JV-ROSEHIP5000 (Rosehip 5000mg)",
|
|
"JV-MVITMINAZ50 (Multivitamins One-a-Day)"
|
|
],
|
|
"subscriptionDecision": "Do not subscribe or spend provider credits yet; DataForSEO is the first paid lane once ASINs and gates are ready, Apify stays held.",
|
|
"actions": [
|
|
{
|
|
"Sequence": 1,
|
|
"Stage": "0",
|
|
"Provider": "No paid provider",
|
|
"Action": "Fill and verify Stage 1 ASIN map",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "no spend required",
|
|
"Owner": "Research / project owner",
|
|
"Evidence": "6 ASINs present / 4 missing; 4 web lookup aids; 2 rejected not-target leads; 575 DataForSEO product-result items saved; 4 unresolved targets have no exact DataForSEO candidate and stay out of the paid payload",
|
|
"CommandOrFile": "bun run dataforseo:products-live with explicit allow flag, then bun run dataforseo:live-asin-evidence && bun run dataforseo:unresolved-asins; data/sources/dataforseo/asin-map.csv",
|
|
"StopRule": "Only accept exact Just Vitamins Amazon UK product matches; leave blank if uncertain.",
|
|
"WhyNext": "This remains useful no-spend research, but the capped pilot payload already uses only the live-confirmed ASINs."
|
|
},
|
|
{
|
|
"Sequence": 2,
|
|
"Stage": "0",
|
|
"Provider": "No paid provider",
|
|
"Action": "Promote only Amazon-confirmed high-confidence ASIN candidates",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "no spend required",
|
|
"Owner": "Research",
|
|
"Evidence": "0 promotion confirmations ready; 0 candidates promoted / 4 candidate rows",
|
|
"CommandOrFile": "bun run dataforseo:asin-confirmations && bun run dataforseo:promote-asins",
|
|
"StopRule": "Only rows marked ready in the confirmation report plus amazon_confirmed_exact_match and Confidence=high can be copied into asin-map.csv; existing ASINs are not overwritten.",
|
|
"WhyNext": "This closes confirmed ASINs safely while keeping uncertain third-party candidate evidence out of paid task payloads."
|
|
},
|
|
{
|
|
"Sequence": 3,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Regenerate capped Amazon Reviews task payload",
|
|
"Status": "ready",
|
|
"SpendAllowed": "no spend required",
|
|
"Owner": "Research",
|
|
"Evidence": "6 ready task rows / 10 capped targets; 4 unresolved ASINs remain outside the payload",
|
|
"CommandOrFile": "bun run dataforseo:pilot",
|
|
"StopRule": "Payload must stay within Stage 1 cap before any provider call.",
|
|
"WhyNext": "Turns the verified ASINs into a reviewable paid-call payload without calling DataForSEO."
|
|
},
|
|
{
|
|
"Sequence": 4,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Record an explicit Stage 1 budget cap before approval",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Project owner",
|
|
"Evidence": "6/9 budget checks passing",
|
|
"CommandOrFile": "data/sources/budgets/source-acquisition-budget.json",
|
|
"StopRule": "Budget must include max spend, max tasks, review depth, and hard stop after the first run. Do not put credentials here.",
|
|
"WhyNext": "A subscription is only safe after the hard cap is written down locally and can be checked by the spend gate."
|
|
},
|
|
{
|
|
"Sequence": 5,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Record current pricing and estimated cost for the capped pilot",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Project owner / research",
|
|
"Evidence": "0.00675 estimated / 1 max spend; 5 pricing refs and 5 scenarios available",
|
|
"CommandOrFile": "content_population_exports/source_acquisition_cost_scenarios.md + data/sources/budgets/source-acquisition-cost-plan.json && bun run source:cost-plan",
|
|
"StopRule": "Do not enable budget or approval from guessed pricing; record current provider pricing source and keep estimate within max spend.",
|
|
"WhyNext": "This is the anti-credit-burn step before subscription: it turns pricing into an explicit capped first-run estimate."
|
|
},
|
|
{
|
|
"Sequence": 6,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Record human spend approval for one capped pilot run",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Project owner",
|
|
"Evidence": "4/14 spend-gate checks passing; approval valid=false",
|
|
"CommandOrFile": "bun run dataforseo:approval-request && bun run source:approvals && data/sources/approvals/dataforseo-stage1-approval.json",
|
|
"StopRule": "Approval should name the cap, provider, marketplace, target count, and expected max spend before credentials are used.",
|
|
"WhyNext": "Prevents accidental credit burn; approval is deliberately local and explicit."
|
|
},
|
|
{
|
|
"Sequence": 7,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Run only the approved DataForSEO pilot and save raw task_get JSON",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Research",
|
|
"Evidence": "0 review tasks posted / 0 reviews returned; 0 raw files / 0 converted reviews",
|
|
"CommandOrFile": "bun run dataforseo:reviews-live then data/sources/dataforseo/raw/",
|
|
"StopRule": "Do not run a second batch until raw output, useful fields, and actual credit cost are reviewed.",
|
|
"WhyNext": "This is the first paid step and should be a single controlled proof of data quality and cost."
|
|
},
|
|
{
|
|
"Sequence": 8,
|
|
"Stage": "1 support",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Send provider support escalation if Reviews endpoint remains 50304",
|
|
"Status": "ready",
|
|
"SpendAllowed": "no spend required",
|
|
"Owner": "Project owner / support",
|
|
"Evidence": "50304: This function temporarily unavailable. Please contact support for more information.; official docs unavailable=true",
|
|
"CommandOrFile": "bun run dataforseo:reviews-docs-status && bun run dataforseo:support-escalation then content_population_exports/dataforseo_support_escalation.md; when support replies, fill data/sources/provider-responses/dataforseo-reviews-endpoint-response.json and run bun run dataforseo:support-response",
|
|
"StopRule": "Escalation packet must contain no credentials and should include endpoint, status code, tiny payload shape, and proof that Products endpoint works.",
|
|
"WhyNext": "This turns the provider-side blocker into an actionable support request instead of more retries or guessing."
|
|
},
|
|
{
|
|
"Sequence": 9,
|
|
"Stage": "1 fallback",
|
|
"Provider": "Manual capture",
|
|
"Action": "Capture Amazon reviews manually if DataForSEO support remains blocked",
|
|
"Status": "ready",
|
|
"SpendAllowed": "no provider spend",
|
|
"Owner": "Research",
|
|
"Evidence": "6 manual capture targets; 0/6 files present; 0/6 files valid; 0 reviews captured",
|
|
"CommandOrFile": "bun run amazon:manual-capture && bun run amazon:manual-capture-validate then content_population_exports/manual_amazon_review_capture_validation.md",
|
|
"StopRule": "Capture only the listed Stage 1 ASINs; do not broaden to catalogue scraping.",
|
|
"WhyNext": "This gives a no-spend fallback source path while the DataForSEO Reviews endpoint is unavailable."
|
|
},
|
|
{
|
|
"Sequence": 10,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Normalize raw provider output into the standard Amazon source-drop path",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "no additional spend",
|
|
"Owner": "Research / dashboard",
|
|
"Evidence": "0 converted files / 0 ingest issues",
|
|
"CommandOrFile": "bun run dataforseo:ingest && bun run validate:sources",
|
|
"StopRule": "Converted source files must preserve review text, rating, date, source URL, SKU, and provider provenance.",
|
|
"WhyNext": "Keeps DataForSEO evidence on the same validation path as manual Amazon drops."
|
|
},
|
|
{
|
|
"Sequence": 11,
|
|
"Stage": "1 review",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Review quality, fields, and cost; decide scale vs Apify vs stop",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocks all scale-up spend",
|
|
"Owner": "Project owner / research",
|
|
"Evidence": "1/7 review checks passing; decision=pending",
|
|
"CommandOrFile": "data/sources/reviews/dataforseo-stage1-review.json",
|
|
"StopRule": "Decision must be one of scale_dataforseo, run_apify_gapfill, or stop_adjust_source_map.",
|
|
"WhyNext": "Prevents the pilot from silently turning into full-catalogue scraping."
|
|
},
|
|
{
|
|
"Sequence": 12,
|
|
"Stage": "2",
|
|
"Provider": "Apify selective",
|
|
"Action": "Run Apify only for named gaps after DataForSEO review",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Research",
|
|
"Evidence": "3 first-batch targets / 4 held; Apify preflight 2/8; Apify budget allowed=false; cost ready=false; approval valid=false; Apify spend allowed=false",
|
|
"CommandOrFile": "bun run apify:task-preflight then content_population_exports/apify_competitor_pdp_input_template.json",
|
|
"StopRule": "One actor, first batch only, inspect raw dataset quality/cost before any further run.",
|
|
"WhyNext": "Apify is useful for PDP/social/browser gaps, but only after the cheaper structured pilot proves what is missing."
|
|
},
|
|
{
|
|
"Sequence": 13,
|
|
"Stage": "control",
|
|
"Provider": "All source packet lanes",
|
|
"Action": "Refresh source packet and delivery index after every change",
|
|
"Status": "ready",
|
|
"SpendAllowed": "no spend required",
|
|
"Owner": "Dashboard",
|
|
"Evidence": "27/27 required source packet files present",
|
|
"CommandOrFile": "bun run source:refresh-packet && bun run delivery:index",
|
|
"StopRule": "Packet freshness does not mean final handoff readiness; verify:handoff remains the final gate.",
|
|
"WhyNext": "Keeps the Export Console and handoff packet aligned with the latest source-acquisition state."
|
|
}
|
|
],
|
|
"immediateActions": [
|
|
{
|
|
"Sequence": 1,
|
|
"Stage": "0",
|
|
"Provider": "No paid provider",
|
|
"Action": "Fill and verify Stage 1 ASIN map",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "no spend required",
|
|
"Owner": "Research / project owner",
|
|
"Evidence": "6 ASINs present / 4 missing; 4 web lookup aids; 2 rejected not-target leads; 575 DataForSEO product-result items saved; 4 unresolved targets have no exact DataForSEO candidate and stay out of the paid payload",
|
|
"CommandOrFile": "bun run dataforseo:products-live with explicit allow flag, then bun run dataforseo:live-asin-evidence && bun run dataforseo:unresolved-asins; data/sources/dataforseo/asin-map.csv",
|
|
"StopRule": "Only accept exact Just Vitamins Amazon UK product matches; leave blank if uncertain.",
|
|
"WhyNext": "This remains useful no-spend research, but the capped pilot payload already uses only the live-confirmed ASINs."
|
|
},
|
|
{
|
|
"Sequence": 2,
|
|
"Stage": "0",
|
|
"Provider": "No paid provider",
|
|
"Action": "Promote only Amazon-confirmed high-confidence ASIN candidates",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "no spend required",
|
|
"Owner": "Research",
|
|
"Evidence": "0 promotion confirmations ready; 0 candidates promoted / 4 candidate rows",
|
|
"CommandOrFile": "bun run dataforseo:asin-confirmations && bun run dataforseo:promote-asins",
|
|
"StopRule": "Only rows marked ready in the confirmation report plus amazon_confirmed_exact_match and Confidence=high can be copied into asin-map.csv; existing ASINs are not overwritten.",
|
|
"WhyNext": "This closes confirmed ASINs safely while keeping uncertain third-party candidate evidence out of paid task payloads."
|
|
},
|
|
{
|
|
"Sequence": 3,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Regenerate capped Amazon Reviews task payload",
|
|
"Status": "ready",
|
|
"SpendAllowed": "no spend required",
|
|
"Owner": "Research",
|
|
"Evidence": "6 ready task rows / 10 capped targets; 4 unresolved ASINs remain outside the payload",
|
|
"CommandOrFile": "bun run dataforseo:pilot",
|
|
"StopRule": "Payload must stay within Stage 1 cap before any provider call.",
|
|
"WhyNext": "Turns the verified ASINs into a reviewable paid-call payload without calling DataForSEO."
|
|
},
|
|
{
|
|
"Sequence": 4,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Record an explicit Stage 1 budget cap before approval",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Project owner",
|
|
"Evidence": "6/9 budget checks passing",
|
|
"CommandOrFile": "data/sources/budgets/source-acquisition-budget.json",
|
|
"StopRule": "Budget must include max spend, max tasks, review depth, and hard stop after the first run. Do not put credentials here.",
|
|
"WhyNext": "A subscription is only safe after the hard cap is written down locally and can be checked by the spend gate."
|
|
},
|
|
{
|
|
"Sequence": 5,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Record current pricing and estimated cost for the capped pilot",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Project owner / research",
|
|
"Evidence": "0.00675 estimated / 1 max spend; 5 pricing refs and 5 scenarios available",
|
|
"CommandOrFile": "content_population_exports/source_acquisition_cost_scenarios.md + data/sources/budgets/source-acquisition-cost-plan.json && bun run source:cost-plan",
|
|
"StopRule": "Do not enable budget or approval from guessed pricing; record current provider pricing source and keep estimate within max spend.",
|
|
"WhyNext": "This is the anti-credit-burn step before subscription: it turns pricing into an explicit capped first-run estimate."
|
|
}
|
|
],
|
|
"paidSpendBlockedActions": [
|
|
{
|
|
"Sequence": 4,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Record an explicit Stage 1 budget cap before approval",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Project owner",
|
|
"Evidence": "6/9 budget checks passing",
|
|
"CommandOrFile": "data/sources/budgets/source-acquisition-budget.json",
|
|
"StopRule": "Budget must include max spend, max tasks, review depth, and hard stop after the first run. Do not put credentials here.",
|
|
"WhyNext": "A subscription is only safe after the hard cap is written down locally and can be checked by the spend gate."
|
|
},
|
|
{
|
|
"Sequence": 5,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Record current pricing and estimated cost for the capped pilot",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Project owner / research",
|
|
"Evidence": "0.00675 estimated / 1 max spend; 5 pricing refs and 5 scenarios available",
|
|
"CommandOrFile": "content_population_exports/source_acquisition_cost_scenarios.md + data/sources/budgets/source-acquisition-cost-plan.json && bun run source:cost-plan",
|
|
"StopRule": "Do not enable budget or approval from guessed pricing; record current provider pricing source and keep estimate within max spend.",
|
|
"WhyNext": "This is the anti-credit-burn step before subscription: it turns pricing into an explicit capped first-run estimate."
|
|
},
|
|
{
|
|
"Sequence": 6,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Record human spend approval for one capped pilot run",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Project owner",
|
|
"Evidence": "4/14 spend-gate checks passing; approval valid=false",
|
|
"CommandOrFile": "bun run dataforseo:approval-request && bun run source:approvals && data/sources/approvals/dataforseo-stage1-approval.json",
|
|
"StopRule": "Approval should name the cap, provider, marketplace, target count, and expected max spend before credentials are used.",
|
|
"WhyNext": "Prevents accidental credit burn; approval is deliberately local and explicit."
|
|
},
|
|
{
|
|
"Sequence": 7,
|
|
"Stage": "1",
|
|
"Provider": "DataForSEO",
|
|
"Action": "Run only the approved DataForSEO pilot and save raw task_get JSON",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Research",
|
|
"Evidence": "0 review tasks posted / 0 reviews returned; 0 raw files / 0 converted reviews",
|
|
"CommandOrFile": "bun run dataforseo:reviews-live then data/sources/dataforseo/raw/",
|
|
"StopRule": "Do not run a second batch until raw output, useful fields, and actual credit cost are reviewed.",
|
|
"WhyNext": "This is the first paid step and should be a single controlled proof of data quality and cost."
|
|
},
|
|
{
|
|
"Sequence": 12,
|
|
"Stage": "2",
|
|
"Provider": "Apify selective",
|
|
"Action": "Run Apify only for named gaps after DataForSEO review",
|
|
"Status": "blocked",
|
|
"SpendAllowed": "blocked",
|
|
"Owner": "Research",
|
|
"Evidence": "3 first-batch targets / 4 held; Apify preflight 2/8; Apify budget allowed=false; cost ready=false; approval valid=false; Apify spend allowed=false",
|
|
"CommandOrFile": "bun run apify:task-preflight then content_population_exports/apify_competitor_pdp_input_template.json",
|
|
"StopRule": "One actor, first batch only, inspect raw dataset quality/cost before any further run.",
|
|
"WhyNext": "Apify is useful for PDP/social/browser gaps, but only after the cheaper structured pilot proves what is missing."
|
|
}
|
|
]
|
|
}
|