{
  "name": "CrowdPull public-data API",
  "description": "A pay-per-job public web data API for AI agents. No scraper setup, no separate source accounts, no long subscription before trying a source.",
  "url": "https://crowdpull-click.pages.dev",
  "homepage": "https://crowdpull-click.pages.dev/",
  "openapi": "https://crowdpull-click.pages.dev/openapi.json",
  "x402": "https://crowdpull-click.pages.dev/.well-known/x402",
  "storefront": "https://crowdpull-click.pages.dev/api/storefront",
  "quote": "https://crowdpull-click.pages.dev/api/quote",
  "llmsTxt": "https://crowdpull-click.pages.dev/llms.txt",
  "mcpServerCard": "https://crowdpull-click.pages.dev/.well-known/mcp/server-card.json",
  "actorCatalog": "https://crowdpull-click.pages.dev/data/crowdpull-actors.json",
  "ampersend": {
    "agentName": "Nimble Router",
    "agentNamespace": "crowdpull",
    "agentSlug": "nimble-router",
    "agentAddress": "0x0F173d839c809f3d76808805b9e380b5331977bf",
    "skillUrl": "https://app.ampersend.ai/api/hosted/crowdpull/nimble-router/skill",
    "proxyUrl": "https://proxy.ampersend.ai/crowdpull/nimble-router/crowdpull-public-data-api",
    "proxyPriceUsd": "0.001",
    "network": "eip155:8453",
    "asset": "USDC",
    "purpose": "Hosted paid directory discovery for Ampersend agents."
  },
  "settlement": {
    "network": "eip155:8453",
    "asset": "USDC",
    "assetAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "facilitator": "https://api.cdp.coinbase.com/platform/v2/x402",
    "payTo": "0x95E548cC2000D8674B3A79F9EbeEc30f8fb7A906"
  },
  "endpoints": [
    {
      "name": "crowdpull.catalog.search",
      "title": "CrowdPull source catalog",
      "category": "catalog",
      "kind": "catalog",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/list",
      "path": "/api/actors/list",
      "price": {
        "mode": "fixed",
        "currency": "USD",
        "amount": "0.005"
      },
      "x402": true,
      "configured": true,
      "description": "Search CrowdPull's public-data catalog and get the supported paid API routes for agent calls.",
      "tags": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search text such as Facebook Marketplace, OfferUp, AliExpress reviews, furniture, local deals, or product reviews."
          },
          "family": {
            "type": "string",
            "description": "Optional CrowdPull family slug such as marketplace-listings, facebook-data, or ecommerce-products-reviews."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object"
      },
      "workflow": "Pay once to search the catalog and choose a paid source route."
    },
    {
      "name": "marketplace-leads",
      "title": "Marketplace Lead Bundle",
      "category": "workflow-bundles",
      "kind": "workflow",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/workflows/marketplace-leads",
      "path": "/api/workflows/marketplace-leads",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.19",
        "max": "2.99"
      },
      "x402": true,
      "configured": true,
      "description": "Search several marketplace sources at once, clean up the listing fields, remove obvious duplicates, and put the leads worth checking first.",
      "tags": [
        "marketplace leads",
        "resale sourcing",
        "classifieds",
        "dedupe",
        "lead scoring"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Marketplace Lead Bundle request. CrowdPull fans this out to the selected public-data sources, then normalizes, deduplicates, and ranks the rows.",
            "properties": {
              "query": {
                "type": "string",
                "description": "Main search term, keyword, product, role, company, or item."
              },
              "searchQuery": {
                "type": "string",
                "description": "Alias for query."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, market, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxPerSource": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "default": 25
              },
              "sources": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "facebook-marketplace-scraper",
                    "offerup-scraper",
                    "craigslist-scraper",
                    "mercari-listings-scraper"
                  ]
                },
                "description": "Optional subset of sources to run. Omit to use the workflow defaults."
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "includeEnrichment": {
                "type": "boolean",
                "default": true
              },
              "filters": {
                "type": "object",
                "additionalProperties": true
              },
              "sourceInputs": {
                "type": "object",
                "additionalProperties": true,
                "description": "Optional per-source input overrides keyed by source name."
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "workflow": {
            "type": "string"
          },
          "jobs": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "token",
          "workflow",
          "jobs"
        ],
        "additionalProperties": true
      },
      "workflow": "POST input to start a multi-source bundle, then poll /api/workflows/status and fetch normalized rows from /api/workflows/results."
    },
    {
      "name": "rental-comps",
      "title": "Rental Comps Bundle",
      "category": "workflow-bundles",
      "kind": "workflow",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/workflows/rental-comps",
      "path": "/api/workflows/rental-comps",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.29",
        "max": "3.49"
      },
      "x402": true,
      "configured": true,
      "description": "Compare public rental listings without rebuilding the same search in two tabs. Returns price, beds, baths, location, and source URLs in one shape.",
      "tags": [
        "rental comps",
        "housing",
        "property listings",
        "rent analysis"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Rental Comps Bundle request. CrowdPull fans this out to the selected public-data sources, then normalizes, deduplicates, and ranks the rows.",
            "properties": {
              "query": {
                "type": "string",
                "description": "Main search term, keyword, product, role, company, or item."
              },
              "searchQuery": {
                "type": "string",
                "description": "Alias for query."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, market, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxPerSource": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "default": 25
              },
              "sources": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "zillow-listings-scraper",
                    "apartments-com-rentals-scraper"
                  ]
                },
                "description": "Optional subset of sources to run. Omit to use the workflow defaults."
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "includeEnrichment": {
                "type": "boolean",
                "default": true
              },
              "filters": {
                "type": "object",
                "additionalProperties": true
              },
              "sourceInputs": {
                "type": "object",
                "additionalProperties": true,
                "description": "Optional per-source input overrides keyed by source name."
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "workflow": {
            "type": "string"
          },
          "jobs": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "token",
          "workflow",
          "jobs"
        ],
        "additionalProperties": true
      },
      "workflow": "POST input to start a multi-source bundle, then poll /api/workflows/status and fetch normalized rows from /api/workflows/results."
    },
    {
      "name": "review-complaints",
      "title": "Review Complaint Mining Bundle",
      "category": "workflow-bundles",
      "kind": "workflow",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/workflows/review-complaints",
      "path": "/api/workflows/review-complaints",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.19",
        "max": "2.49"
      },
      "x402": true,
      "configured": true,
      "description": "Pull product and review rows, keep product IDs and source URLs attached, and surface repeated complaints instead of burying them in review text.",
      "tags": [
        "review mining",
        "complaints",
        "product research",
        "sentiment"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Review Complaint Mining Bundle request. CrowdPull fans this out to the selected public-data sources, then normalizes, deduplicates, and ranks the rows.",
            "properties": {
              "query": {
                "type": "string",
                "description": "Main search term, keyword, product, role, company, or item."
              },
              "searchQuery": {
                "type": "string",
                "description": "Alias for query."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, market, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxPerSource": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "default": 25
              },
              "sources": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "aliexpress-reviews-scraper",
                    "target-products-scraper",
                    "flipkart-products-scraper"
                  ]
                },
                "description": "Optional subset of sources to run. Omit to use the workflow defaults."
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "includeEnrichment": {
                "type": "boolean",
                "default": true
              },
              "filters": {
                "type": "object",
                "additionalProperties": true
              },
              "sourceInputs": {
                "type": "object",
                "additionalProperties": true,
                "description": "Optional per-source input overrides keyed by source name."
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "workflow": {
            "type": "string"
          },
          "jobs": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "token",
          "workflow",
          "jobs"
        ],
        "additionalProperties": true
      },
      "workflow": "POST input to start a multi-source bundle, then poll /api/workflows/status and fetch normalized rows from /api/workflows/results."
    },
    {
      "name": "hiring-signals",
      "title": "Hiring Signal Bundle",
      "category": "workflow-bundles",
      "kind": "workflow",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/workflows/hiring-signals",
      "path": "/api/workflows/hiring-signals",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.19",
        "max": "1.99"
      },
      "x402": true,
      "configured": true,
      "description": "Find public job posts by role, market, and remote filter, then return company, salary, location, apply URL, and source URL fields.",
      "tags": [
        "jobs",
        "hiring signals",
        "sales triggers",
        "labor market"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Hiring Signal Bundle request. CrowdPull fans this out to the selected public-data sources, then normalizes, deduplicates, and ranks the rows.",
            "properties": {
              "query": {
                "type": "string",
                "description": "Main search term, keyword, product, role, company, or item."
              },
              "searchQuery": {
                "type": "string",
                "description": "Alias for query."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, market, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxPerSource": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "default": 25
              },
              "sources": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "crowdpull-ziprecruiter-jobs-scraper"
                  ]
                },
                "description": "Optional subset of sources to run. Omit to use the workflow defaults."
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "includeEnrichment": {
                "type": "boolean",
                "default": true
              },
              "filters": {
                "type": "object",
                "additionalProperties": true
              },
              "sourceInputs": {
                "type": "object",
                "additionalProperties": true,
                "description": "Optional per-source input overrides keyed by source name."
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "workflow": {
            "type": "string"
          },
          "jobs": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "token",
          "workflow",
          "jobs"
        ],
        "additionalProperties": true
      },
      "workflow": "POST input to start a multi-source bundle, then poll /api/workflows/status and fetch normalized rows from /api/workflows/results."
    },
    {
      "name": "instant-marketplace-leads",
      "title": "Instant Marketplace Leads",
      "category": "cached-results",
      "kind": "instant-cache",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/instant/marketplace-leads",
      "path": "/api/instant/marketplace-leads",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.01",
        "max": "1.99"
      },
      "x402": true,
      "configured": true,
      "description": "Return recent marketplace leads when a matching cache entry exists. If the cache misses, the caller can pay for a live Marketplace Lead Bundle refresh.",
      "tags": [
        "instant results",
        "cached marketplace leads",
        "fast agent lookup"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "properties": {
              "query": {
                "type": "string"
              },
              "searchQuery": {
                "type": "string"
              },
              "location": {
                "type": "string"
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "default": 25
              },
              "maxAgeMinutes": {
                "type": "integer",
                "minimum": 1,
                "maximum": 1440,
                "default": 240
              },
              "refreshLive": {
                "type": "boolean",
                "default": true
              },
              "sources": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "workflow": "POST input to retrieve cached rows when available or start a live bundle refresh on cache miss."
    },
    {
      "name": "watchlist-create",
      "title": "CrowdPull Watchlist",
      "category": "recurring-monitoring",
      "kind": "monitor",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/monitors/watchlist",
      "path": "/api/monitors/watchlist",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.29",
        "max": "2.99"
      },
      "x402": true,
      "configured": true,
      "description": "Create a watchlist token for a repeated marketplace, rental, review, or hiring check. Store the token once, then pay only when refreshing it.",
      "tags": [
        "watchlist",
        "monitoring",
        "only new results",
        "recurring revenue"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "properties": {
              "workflow": {
                "type": "string",
                "enum": [
                  "marketplace-leads",
                  "rental-comps",
                  "review-complaints",
                  "hiring-signals"
                ],
                "default": "marketplace-leads"
              },
              "query": {
                "type": "string"
              },
              "searchQuery": {
                "type": "string"
              },
              "location": {
                "type": "string"
              },
              "cadence": {
                "type": "string",
                "enum": [
                  "manual",
                  "hourly",
                  "daily",
                  "weekly"
                ],
                "default": "manual"
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "default": 25
              },
              "webhookUrl": {
                "type": "string",
                "description": "Optional customer-owned webhook for future managed-monitor delivery."
              },
              "runInitial": {
                "type": "boolean",
                "default": false
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "workflow": "POST input to create a portable watchlist token. Refresh through the related workflow route on the chosen cadence."
    },
    {
      "name": "watchlist-refresh",
      "title": "CrowdPull Watchlist Refresh",
      "category": "recurring-monitoring",
      "kind": "monitor-refresh",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/monitors/refresh",
      "path": "/api/monitors/refresh",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.09",
        "max": "2.99"
      },
      "x402": true,
      "configured": true,
      "description": "Refresh an existing CrowdPull watchlist and run the matching workflow again. The monitor token stays the same; each refresh is paid separately.",
      "tags": [
        "watchlist",
        "monitoring",
        "refresh",
        "only new results",
        "recurring revenue"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "required": [
              "monitorToken"
            ],
            "properties": {
              "monitorToken": {
                "type": "string",
                "description": "Signed token returned by /api/monitors/watchlist."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "default": 25
              },
              "maxPerSource": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "includeEnrichment": {
                "type": "boolean",
                "default": true
              },
              "filters": {
                "type": "object",
                "additionalProperties": true
              },
              "sourceInputs": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "workflow": "POST a monitor token to refresh a saved watchlist and receive a workflow token for status/results."
    },
    {
      "name": "discovery-smoke",
      "title": "CrowdPull Discovery Smoke",
      "category": "discovery-verification",
      "kind": "smoke-test",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/smoke/discovery",
      "path": "/api/smoke/discovery",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.001",
        "max": "0.001"
      },
      "x402": true,
      "configured": true,
      "description": "A tiny paid call for x402 directories and agents. It proves discovery metadata, settlement config, endpoint count, and route examples without starting a scraper.",
      "tags": [
        "x402",
        "smoke test",
        "directory verification",
        "bazaar",
        "agent discovery"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "input": {
            "type": "object",
            "properties": {
              "includeRoutes": {
                "type": "boolean",
                "default": true
              },
              "includeExamples": {
                "type": "boolean",
                "default": true
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "workflow": "POST once to verify paid x402 settlement, discovery metadata, and route configuration without starting backend jobs."
    },
    {
      "name": "row-enrichment",
      "title": "CrowdPull Row Enrichment",
      "category": "data-enrichment",
      "kind": "enrichment",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/enrich/rows",
      "path": "/api/enrich/rows",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "0.99"
      },
      "x402": true,
      "configured": true,
      "description": "Clean supplied rows after the scrape: normalize fields, remove duplicates, score likely leads, and add light labels without rerunning the source.",
      "tags": [
        "dedupe",
        "lead scoring",
        "sentiment",
        "row normalization",
        "upsell"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Rows from CrowdPull or another source. Each row can include source URL, title, price, location, text, rating, company, or other fields."
          },
          "input": {
            "type": "object",
            "properties": {
              "rows": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true
                },
                "description": "Rows from CrowdPull or another source. Each row can include source URL, title, price, location, text, rating, company, or other fields."
              },
              "mode": {
                "type": "string",
                "enum": [
                  "marketplace",
                  "rentals",
                  "reviews",
                  "jobs",
                  "auto"
                ],
                "default": "auto"
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 500,
                "default": 100
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "workflow": "POST rows to normalize, deduplicate, score, and classify without rerunning a scrape."
    },
    {
      "name": "facebook-marketplace-scraper",
      "title": "Facebook Marketplace Scraper",
      "category": "marketplace-listings",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/facebook-marketplace-scraper/call",
      "path": "/api/actors/facebook-marketplace-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.02",
        "max": "1.00"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Facebook Marketplace run for public local listings. Good for quick lead checks by city, keyword, price range, and optional detail fetch.",
      "tags": [
        "facebook",
        "marketplace",
        "local listings",
        "resale"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Facebook Marketplace Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "marketplaceUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Facebook Marketplace city, category, or search URLs."
              },
              "radiusKm": {
                "type": "integer",
                "minimum": 1,
                "maximum": 500,
                "default": 65
              },
              "minPrice": {
                "type": "integer",
                "minimum": 0,
                "description": "Minimum price in local currency cents."
              },
              "maxPrice": {
                "type": "integer",
                "minimum": 0,
                "description": "Maximum price in local currency cents."
              },
              "untilDate": {
                "type": "string",
                "description": "Only keep listings on or after this YYYY-MM-DD date."
              },
              "strictFiltering": {
                "type": "boolean",
                "default": false
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "offerup-scraper",
      "title": "OfferUp Scraper",
      "category": "marketplace-listings",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/offerup-scraper/call",
      "path": "/api/actors/offerup-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.02",
        "max": "1.00"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull OfferUp run for public local listings. Good for quick resale, free-stuff, furniture, equipment, and price-monitoring checks.",
      "tags": [
        "offerup",
        "marketplace",
        "local listings",
        "resale"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "OfferUp Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "latitude": {
                "type": "number"
              },
              "longitude": {
                "type": "number"
              },
              "radiusMiles": {
                "type": "integer",
                "minimum": 1,
                "maximum": 500,
                "default": 30
              },
              "minPrice": {
                "type": "integer",
                "minimum": 0
              },
              "maxPrice": {
                "type": "integer",
                "minimum": 0
              },
              "condition": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "NEW",
                    "OPEN_BOX",
                    "REFURBISHED",
                    "USED",
                    "BROKEN",
                    "OTHER"
                  ]
                }
              },
              "sortBy": {
                "type": "string",
                "enum": [
                  "-posted",
                  "distance",
                  "price",
                  "-price"
                ],
                "default": "-posted"
              },
              "delivery": {
                "type": "string",
                "enum": [
                  "p",
                  "s",
                  "p_s"
                ],
                "default": "p_s"
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "profitability-router",
        "nativeCandidate": true,
        "fallback": "managed-backend",
        "routingSignals": [
          "customer_price",
          "estimated_native_cost",
          "estimated_managed_cost",
          "minimum_margin"
        ]
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "craigslist-scraper",
      "title": "Craigslist Classifieds Scraper",
      "category": "marketplace-listings",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/craigslist-scraper/call",
      "path": "/api/actors/craigslist-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "1.25"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Craigslist run for public classifieds across for-sale, housing, cars, jobs, gigs, services, community, and events.",
      "tags": [
        "craigslist",
        "classifieds",
        "local listings",
        "lead generation"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Craigslist Classifieds Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "city": {
                "type": "string",
                "description": "Craigslist city or region slug, for example detroit."
              },
              "category": {
                "type": "string",
                "description": "Craigslist category slug such as sss, apa, cta, or jjg."
              },
              "postalCode": {
                "type": "string"
              },
              "searchDistance": {
                "type": "integer",
                "minimum": 1,
                "maximum": 500
              },
              "maxResultsPerSearch": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "profitability-router",
        "nativeCandidate": true,
        "fallback": "managed-backend",
        "routingSignals": [
          "customer_price",
          "estimated_native_cost",
          "estimated_managed_cost",
          "minimum_margin"
        ]
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "mercari-listings-scraper",
      "title": "Mercari Listings Scraper",
      "category": "marketplace-listings",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/mercari-listings-scraper/call",
      "path": "/api/actors/mercari-listings-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "1.00"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Mercari run for public search, item, and seller inventory data with source URLs and listing diagnostics.",
      "tags": [
        "mercari",
        "marketplace",
        "seller inventory",
        "resale"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Mercari Listings Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "queries": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "priceMin": {
                "type": "integer",
                "minimum": 0
              },
              "priceMax": {
                "type": "integer",
                "minimum": 0
              },
              "status": {
                "type": "string",
                "description": "Listing status filter when supported, for example on_sale."
              },
              "maxPages": {
                "type": "integer",
                "minimum": 1,
                "maximum": 10,
                "default": 2
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "zillow-listings-scraper",
      "title": "Zillow Listings Scraper",
      "category": "real-estate-rentals",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/zillow-listings-scraper/call",
      "path": "/api/actors/zillow-listings-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.50"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Zillow run for public property search, URL, and lookup workflows with price and property filters.",
      "tags": [
        "zillow",
        "real estate",
        "property listings",
        "housing"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Zillow Listings Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "mode": {
                "type": "string",
                "enum": [
                  "search",
                  "url",
                  "lookup"
                ],
                "default": "search"
              },
              "searchUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Zillow search URLs. Required in URL mode. CrowdPull also accepts startUrls or urls and maps them to this field."
              },
              "listingType": {
                "type": "string",
                "description": "for_sale, for_rent, sold, or another source-supported listing type."
              },
              "priceMin": {
                "type": "integer",
                "minimum": 0
              },
              "priceMax": {
                "type": "integer",
                "minimum": 0
              },
              "bedsMin": {
                "type": "integer",
                "minimum": 0
              },
              "bathsMin": {
                "type": "integer",
                "minimum": 0
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "apartments-com-rentals-scraper",
      "title": "Apartments.com Rentals Scraper",
      "category": "real-estate-rentals",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/apartments-com-rentals-scraper/call",
      "path": "/api/actors/apartments-com-rentals-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.25"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Apartments.com run for public rental listings by city, price, bedrooms, pet filters, and property type.",
      "tags": [
        "apartments",
        "rentals",
        "housing",
        "rent comps"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Apartments.com Rentals Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "scope": {
                "type": "string",
                "description": "Search scope such as city, state, neighborhood, or url when supported."
              },
              "bedrooms": {
                "type": "string"
              },
              "maxRent": {
                "type": "integer",
                "minimum": 0
              },
              "minRent": {
                "type": "integer",
                "minimum": 0
              },
              "petFriendly": {
                "type": "boolean"
              },
              "maxPages": {
                "type": "integer",
                "minimum": 1,
                "maximum": 10,
                "default": 3
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "aliexpress-reviews-scraper",
      "title": "AliExpress Reviews Scraper",
      "category": "ecommerce-products-reviews",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/aliexpress-reviews-scraper/call",
      "path": "/api/actors/aliexpress-reviews-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.02",
        "max": "0.75"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull AliExpress Reviews run for public product reviews. Good for supplier checks, complaint mining, and review datasets.",
      "tags": [
        "aliexpress",
        "reviews",
        "product research",
        "sentiment"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "AliExpress Reviews Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "productIds": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string"
                },
                "description": "AliExpress product URLs or numeric product IDs."
              },
              "productId": {
                "type": "string"
              },
              "productUrl": {
                "type": "string"
              },
              "maxReviewsPerProduct": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "default": 50
              },
              "starFilter": {
                "type": "string",
                "enum": [
                  "all_star",
                  "5",
                  "4",
                  "3",
                  "2",
                  "1"
                ],
                "default": "all_star"
              },
              "sortBy": {
                "type": "string",
                "enum": [
                  "default",
                  "latest"
                ],
                "default": "default"
              },
              "includeImages": {
                "type": "boolean",
                "default": false
              },
              "includeProductStats": {
                "type": "boolean",
                "default": true
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "profitability-router",
        "nativeCandidate": true,
        "fallback": "managed-backend",
        "routingSignals": [
          "customer_price",
          "estimated_native_cost",
          "estimated_managed_cost",
          "minimum_margin"
        ]
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "target-products-scraper",
      "title": "Target Products Scraper",
      "category": "ecommerce-products-reviews",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/target-products-scraper/call",
      "path": "/api/actors/target-products-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "1.00"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Target run for public product search, category, product URL, price, rating, UPC, DPCI, and review sample data.",
      "tags": [
        "target",
        "retail",
        "prices",
        "product data"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Target Products Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "productIds": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "tcins": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "storeId": {
                "type": "string"
              },
              "zipCode": {
                "type": "string"
              },
              "includeReviews": {
                "type": "boolean",
                "default": false
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "profitability-router",
        "nativeCandidate": true,
        "fallback": "managed-backend",
        "routingSignals": [
          "customer_price",
          "estimated_native_cost",
          "estimated_managed_cost",
          "minimum_margin"
        ]
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "flipkart-products-scraper",
      "title": "Flipkart Products Scraper",
      "category": "ecommerce-products-reviews",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/flipkart-products-scraper/call",
      "path": "/api/actors/flipkart-products-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "1.00"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Flipkart run for public product listings from search, category, and product pages with optional detail and review enrichment.",
      "tags": [
        "flipkart",
        "ecommerce",
        "prices",
        "product data"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Flipkart Products Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "maxPages": {
                "type": "integer",
                "minimum": 1,
                "maximum": 10
              },
              "includeReviews": {
                "type": "boolean",
                "default": false
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "profitability-router",
        "nativeCandidate": true,
        "fallback": "managed-backend",
        "routingSignals": [
          "customer_price",
          "estimated_native_cost",
          "estimated_managed_cost",
          "minimum_margin"
        ]
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "goodrx-drug-prices-scraper",
      "title": "GoodRx Drug Prices Scraper",
      "category": "health-prices",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/goodrx-drug-prices-scraper/call",
      "path": "/api/actors/goodrx-drug-prices-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.25"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull GoodRx run for public prescription price comparisons by drug, ZIP code, pharmacy, quantity, and delivery mode.",
      "tags": [
        "goodrx",
        "drug prices",
        "pharmacy",
        "healthcare"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "GoodRx Drug Prices Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "drugNames": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "drugName": {
                "type": "string"
              },
              "zips": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "zip": {
                "type": "string"
              },
              "quantity": {
                "type": "integer",
                "minimum": 1
              },
              "deliveryType": {
                "type": "string",
                "enum": [
                  "pickup",
                  "mail",
                  "all"
                ]
              },
              "includeCoupons": {
                "type": "boolean",
                "default": true
              },
              "maxOffersPerDrugZip": {
                "type": "integer",
                "minimum": 1,
                "maximum": 50
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "crowdpull-ziprecruiter-jobs-scraper",
      "title": "ZipRecruiter Jobs Scraper",
      "category": "jobs-hiring",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/crowdpull-ziprecruiter-jobs-scraper/call",
      "path": "/api/actors/crowdpull-ziprecruiter-jobs-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.25"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull ZipRecruiter run for public job listings by keyword, location, remote filter, salary fields, and apply links.",
      "tags": [
        "jobs",
        "ziprecruiter",
        "hiring",
        "labor market"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "ZipRecruiter Jobs Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "remote": {
                "type": "boolean"
              },
              "salaryMin": {
                "type": "integer",
                "minimum": 0
              },
              "maxPages": {
                "type": "integer",
                "minimum": 1,
                "maximum": 10
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "facebook-comment-scraper",
      "title": "Facebook Comment Scraper",
      "category": "facebook-data",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/facebook-comment-scraper/call",
      "path": "/api/actors/facebook-comment-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.04",
        "max": "1.25"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Facebook Comment run for public comments and replies from supported public Facebook posts.",
      "tags": [
        "facebook",
        "comments",
        "social listening",
        "sentiment"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Facebook Comment Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "postUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "maxComments": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250
              },
              "includeReplies": {
                "type": "boolean",
                "default": true
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "facebook-group-posts-scraper",
      "title": "Facebook Group Posts Scraper",
      "category": "facebook-data",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/facebook-group-posts-scraper/call",
      "path": "/api/actors/facebook-group-posts-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.04",
        "max": "1.25"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Facebook Group Posts run for posts from supported public Facebook group pages.",
      "tags": [
        "facebook",
        "groups",
        "posts",
        "social listening"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Facebook Group Posts Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "groupUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "maxPosts": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250
              },
              "sinceDate": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "facebook-page-posts-scraper",
      "title": "Facebook Page Posts Scraper",
      "category": "facebook-data",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/facebook-page-posts-scraper/call",
      "path": "/api/actors/facebook-page-posts-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.04",
        "max": "1.25"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Facebook Page Posts run for public page and profile posts with date filtering and source URLs.",
      "tags": [
        "facebook",
        "pages",
        "posts",
        "brand monitoring"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Facebook Page Posts Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "pageUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "maxPosts": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250
              },
              "sinceDate": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "facebook-profile-scraper",
      "title": "Facebook Profile Scraper",
      "category": "facebook-data",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/facebook-profile-scraper/call",
      "path": "/api/actors/facebook-profile-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.04",
        "max": "1.25"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Facebook Profile run for public profile posts, reactions, images, and source URLs where publicly visible.",
      "tags": [
        "facebook",
        "profiles",
        "public posts",
        "social research"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Facebook Profile Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "profileUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "maxPosts": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250
              },
              "sinceDate": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "instagram-scraper",
      "title": "Instagram Scraper",
      "category": "social-video-intelligence",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/instagram-scraper/call",
      "path": "/api/actors/instagram-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.50"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull Instagram run for public profiles, posts, reels, comments, hashtags, places, and tagged-mention workflows where supported.",
      "tags": [
        "instagram",
        "social listening",
        "creators",
        "hashtags"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "Instagram Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "usernames": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "hashtags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "places": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "maxPosts": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "youtube-scraper-intelligence",
      "title": "YouTube Scraper Intelligence",
      "category": "social-video-intelligence",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/youtube-scraper-intelligence/call",
      "path": "/api/actors/youtube-scraper-intelligence/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.50"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull YouTube run for public videos, Shorts, streams, channels, playlists, search results, subtitles, comments, and transcript records.",
      "tags": [
        "youtube",
        "transcripts",
        "comments",
        "video intelligence"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "YouTube Scraper Intelligence input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "videoUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "channelUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "playlistUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "includeSubtitles": {
                "type": "boolean",
                "default": true
              },
              "includeComments": {
                "type": "boolean",
                "default": false
              },
              "maxVideos": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    },
    {
      "name": "osha-violations-scraper",
      "title": "OSHA Violations Scraper",
      "category": "public-records",
      "kind": "source-call",
      "method": "POST",
      "url": "https://crowdpull-click.pages.dev/api/actors/osha-violations-scraper/call",
      "path": "/api/actors/osha-violations-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.25"
      },
      "x402": true,
      "configured": true,
      "description": "Start a capped CrowdPull OSHA run for public violation records used in compliance, account scoring, and risk research workflows.",
      "tags": [
        "osha",
        "public records",
        "compliance",
        "risk"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object",
            "description": "OSHA Violations Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
            "required": [],
            "properties": {
              "startUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public source URLs to collect from."
              },
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Public URLs accepted by the selected source."
              },
              "url": {
                "type": "string",
                "description": "Single public URL accepted by the selected source."
              },
              "query": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "searchQuery": {
                "type": "string",
                "description": "Search query or keyword."
              },
              "location": {
                "type": "string",
                "description": "City, ZIP, state, neighborhood, or source-supported location."
              },
              "maxItems": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxResults": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "maxListings": {
                "type": "integer",
                "minimum": 1,
                "maximum": 250,
                "default": 25
              },
              "includeDetails": {
                "type": "boolean",
                "default": false
              },
              "establishmentName": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "fromDate": {
                "type": "string"
              },
              "toDate": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "options": {
            "type": "object",
            "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
            "properties": {
              "build": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "memory": {
                "type": "integer",
                "minimum": 128,
                "maximum": 8192
              },
              "waitForFinishSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 60,
                "default": 10
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "https://crowdpull-click.pages.dev/openapi.json#/components/schemas/CrowdPullJob"
      },
      "execution": {
        "strategy": "managed-backend",
        "nativeCandidate": false,
        "fallback": "managed-backend",
        "routingSignals": []
      },
      "workflow": "POST input to start a job, then poll /api/actors/status and fetch /api/actors/results with the returned token."
    }
  ],
  "recommendedWorkflows": [
    {
      "name": "marketplace.search",
      "title": "Marketplace lead search",
      "description": "Start with Facebook Marketplace, OfferUp, Craigslist, or Mercari for local resale and classified leads. Combine rows by source URL, listing ID, title, price, and location.",
      "sources": [
        "facebook-marketplace-scraper",
        "offerup-scraper",
        "craigslist-scraper",
        "mercari-listings-scraper"
      ],
      "workflow": "marketplace-leads",
      "priceUsd": {
        "typical": "0.05-0.35 per source call",
        "multiSource": "0.20-1.00 depending on limits and detail fetches"
      },
      "routes": [
        "https://crowdpull-click.pages.dev/api/actors/facebook-marketplace-scraper/call",
        "https://crowdpull-click.pages.dev/api/actors/offerup-scraper/call",
        "https://crowdpull-click.pages.dev/api/actors/craigslist-scraper/call",
        "https://crowdpull-click.pages.dev/api/actors/mercari-listings-scraper/call"
      ],
      "bundleRoute": "https://crowdpull-click.pages.dev/api/workflows/marketplace-leads"
    },
    {
      "name": "rentals.comps",
      "title": "Rental and property comps",
      "description": "Use Zillow and Apartments.com for public housing inventory, rent, price, bedroom, amenity, and source URL comparison.",
      "sources": [
        "zillow-listings-scraper",
        "apartments-com-rentals-scraper"
      ],
      "workflow": "rental-comps",
      "priceUsd": {
        "typical": "0.05-0.75 per source call"
      },
      "routes": [
        "https://crowdpull-click.pages.dev/api/actors/zillow-listings-scraper/call",
        "https://crowdpull-click.pages.dev/api/actors/apartments-com-rentals-scraper/call"
      ],
      "bundleRoute": "https://crowdpull-click.pages.dev/api/workflows/rental-comps"
    },
    {
      "name": "reviews.sentiment",
      "title": "Product review and price research",
      "description": "Use AliExpress reviews for complaint mining, Target or Flipkart for product and price checks, and keep product IDs/source URLs attached.",
      "sources": [
        "aliexpress-reviews-scraper",
        "target-products-scraper",
        "flipkart-products-scraper"
      ],
      "workflow": "review-complaints",
      "priceUsd": {
        "typical": "0.03-0.50 per source call"
      },
      "routes": [
        "https://crowdpull-click.pages.dev/api/actors/aliexpress-reviews-scraper/call",
        "https://crowdpull-click.pages.dev/api/actors/target-products-scraper/call",
        "https://crowdpull-click.pages.dev/api/actors/flipkart-products-scraper/call"
      ],
      "bundleRoute": "https://crowdpull-click.pages.dev/api/workflows/review-complaints"
    },
    {
      "name": "jobs.leads",
      "title": "Hiring signal search",
      "description": "Use ZipRecruiter public job listings to find companies hiring for a role, then export title, company, location, salary fields, remote flag, apply URL, and source URL.",
      "sources": [
        "crowdpull-ziprecruiter-jobs-scraper"
      ],
      "workflow": "hiring-signals",
      "priceUsd": {
        "typical": "0.05-0.75 per call"
      },
      "routes": [
        "https://crowdpull-click.pages.dev/api/actors/crowdpull-ziprecruiter-jobs-scraper/call"
      ],
      "bundleRoute": "https://crowdpull-click.pages.dev/api/workflows/hiring-signals"
    }
  ],
  "executionBackends": {
    "current": "profitability-router",
    "target": "choose the highest expected-margin backend with managed fallback when reliable and profitable",
    "routerMode": "profit",
    "minimumMarginUsd": "0.005",
    "nativeCandidateSources": [
      "offerup-scraper",
      "craigslist-scraper",
      "aliexpress-reviews-scraper",
      "target-products-scraper",
      "flipkart-products-scraper"
    ],
    "fallbackPolicy": "Native runners can be enabled per source with CROWDPULL_NATIVE_RUNNER_URL. The router compares estimated native cost against managed execution cost and picks the best expected margin. If the chosen backend fails and fallback is enabled, CrowdPull tries the next profitable backend while keeping the public result shape stable."
  },
  "guidance": [
    "Use /api/directory for the compact menu and /openapi.json for schemas.",
    "Use /api/storefront when the caller wants the full department-style SKU catalog.",
    "Use /api/quote when the buyer describes a goal and needs CrowdPull to recommend the right SKU.",
    "Use /api/workflows/* when the buyer wants a finished outcome instead of one raw source call.",
    "Use /api/enrich/rows when you already have rows and only need dedupe, scoring, and light classification.",
    "For a paid source call, send the intended input without payment first to receive a 402 quote with the exact x402 amount.",
    "After paying and starting a job, keep the returned token. Poll the matching status endpoint, then fetch results.",
    "For broad marketplace tasks, try /api/instant/marketplace-leads first, then refresh live with /api/workflows/marketplace-leads on cache miss.",
    "Use /api/monitors/watchlist to save a repeatable query, then /api/monitors/refresh when an agent wants to buy the next refresh.",
    "Use /api/smoke/discovery for a tiny paid canary that proves x402 settlement and route discoverability without starting scraper jobs.",
    "Ampersend agents can inspect or pay for the hosted directory proxy, then use the direct CrowdPull x402 routes returned by this directory for the actual job."
  ],
  "seeAlso": [
    "https://crowdpull-click.pages.dev/api/storefront",
    "https://crowdpull-click.pages.dev/api/quote",
    "https://crowdpull-click.pages.dev/openapi.json",
    "https://crowdpull-click.pages.dev/.well-known/x402",
    "https://crowdpull-click.pages.dev/llms.txt",
    "https://crowdpull-click.pages.dev/.well-known/mcp/server-card.json",
    "https://crowdpull-click.pages.dev/data/crowdpull-actors.json",
    "https://app.ampersend.ai/api/hosted/crowdpull/nimble-router/skill",
    "https://proxy.ampersend.ai/crowdpull/nimble-router/crowdpull-public-data-api"
  ]
}