{
  "name": "CrowdPull agent store",
  "description": "Store catalog for CrowdPull public-data jobs, repeat monitors, row cleanup, and agent discovery checks.",
  "url": "https://crowdpull.click/store/",
  "storefront": "https://crowdpull.click/api/storefront",
  "quote": "https://crowdpull.click/api/quote",
  "openapi": "https://crowdpull.click/openapi.json",
  "x402": "https://crowdpull.click/.well-known/x402",
  "llmsTxt": "https://crowdpull.click/llms.txt",
  "settlement": {
    "network": "eip155:8453",
    "asset": "USDC",
    "assetAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "facilitator": "https://api.cdp.coinbase.com/platform/v2/x402",
    "payTo": "0x95E548cC2000D8674B3A79F9EbeEc30f8fb7A906"
  },
  "departments": [
    {
      "slug": "data",
      "label": "Data",
      "url": "https://crowdpull.click/store/data/",
      "headline": "Rows from the public pages buyers already check by hand.",
      "summary": "Marketplace searches, product reviews, rental comps, job posts, social pages, drug prices, videos, and public records. Pick the source, set a cap, and get rows with the original URLs still attached.",
      "buyer": "Choose it when the buyer has a search term, product URL, city, or source page and does not want to pay someone to copy results into a spreadsheet.",
      "examples": [
        "marketplace lead search",
        "rental comp pull",
        "product review mining",
        "hiring signal search"
      ],
      "skuCount": 23,
      "skus": [
        "bundle.marketplace-leads",
        "bundle.rental-comps",
        "bundle.review-complaints",
        "bundle.hiring-signals",
        "sku.instant-marketplace-leads",
        "source.facebook-marketplace-scraper",
        "source.offerup-scraper",
        "source.craigslist-scraper",
        "source.mercari-listings-scraper",
        "source.zillow-listings-scraper",
        "source.apartments-com-rentals-scraper",
        "source.aliexpress-reviews-scraper",
        "source.target-products-scraper",
        "source.flipkart-products-scraper",
        "source.goodrx-drug-prices-scraper",
        "source.crowdpull-ziprecruiter-jobs-scraper",
        "source.facebook-comment-scraper",
        "source.facebook-group-posts-scraper",
        "source.facebook-page-posts-scraper",
        "source.facebook-profile-scraper",
        "source.instagram-scraper",
        "source.youtube-scraper-intelligence",
        "source.osha-violations-scraper"
      ]
    },
    {
      "slug": "monitoring",
      "label": "Monitoring",
      "url": "https://crowdpull.click/store/monitoring/",
      "headline": "Watchlists agents can refresh without rebuilding the query.",
      "summary": "Saved queries for jobs that keep coming back. Create the watchlist once, keep the monitor token, and pay only when the next refresh is worth running.",
      "buyer": "Choose it when stale data is the real problem: new local listings, rent changes, price drops, complaint drift, or companies that started hiring again.",
      "examples": [
        "daily used couch checks",
        "new rental comps",
        "price-drop scans",
        "review complaint watch"
      ],
      "skuCount": 2,
      "skus": [
        "monitor.watchlist",
        "monitor.refresh"
      ]
    },
    {
      "slug": "enrichment",
      "label": "Enrichment",
      "url": "https://crowdpull.click/store/enrichment/",
      "headline": "Clean, dedupe, score, and rank data agents already have.",
      "summary": "Raw rows usually need a second pass. CrowdPull can normalize fields, remove duplicates, add light labels, and push the records worth checking to the top.",
      "buyer": "Choose it when the scrape already happened but the next system needs cleaner rows, fewer duplicates, or a shortlist instead of another dump.",
      "examples": [
        "lead scoring",
        "duplicate removal",
        "complaint labels",
        "row normalization"
      ],
      "skuCount": 1,
      "skus": [
        "enrich.rows"
      ]
    },
    {
      "slug": "agent-tools",
      "label": "Agent Tools",
      "url": "https://crowdpull.click/store/agent-tools/",
      "headline": "Small paid checks that help agents decide what to buy next.",
      "summary": "Small endpoints for discovery, x402 checks, and catalog inspection. A directory can prove payment works without accidentally starting a real scrape.",
      "buyer": "Choose it when a caller needs to test settlement, inspect the catalog, or choose the next paid route before spending more.",
      "examples": [
        "x402 discovery smoke",
        "catalog search",
        "route inspection",
        "directory verification"
      ],
      "skuCount": 2,
      "skus": [
        "tools.catalog-search",
        "tools.discovery-smoke"
      ]
    }
  ],
  "skus": [
    {
      "id": "tools.catalog-search",
      "title": "CrowdPull source catalog",
      "department": "agent-tools",
      "departmentLabel": "Agent Tools",
      "kind": "catalog",
      "family": "store",
      "method": "POST",
      "path": "/api/actors/list",
      "url": "https://crowdpull.click/api/actors/list",
      "price": {
        "mode": "fixed",
        "currency": "USD",
        "amount": "0.005"
      },
      "x402": true,
      "status": "live",
      "description": "Search CrowdPull's public-data catalog and get the supported paid API routes for agent calls.",
      "tags": [],
      "workflowKey": null,
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": false,
      "async": false,
      "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",
        "additionalProperties": true
      },
      "example": {
        "query": "marketplace leads",
        "limit": 5
      },
      "followup": null
    },
    {
      "id": "bundle.marketplace-leads",
      "title": "Marketplace Lead Bundle",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "workflow",
      "family": "workflow-bundles",
      "method": "POST",
      "path": "/api/workflows/marketplace-leads",
      "url": "https://crowdpull.click/api/workflows/marketplace-leads",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.19",
        "max": "2.99"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": "marketplace-leads",
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": true,
      "async": true,
      "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
      },
      "example": {
        "input": {
          "query": "full length mirror",
          "location": "New York, NY",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/workflows/status",
        "results": "https://crowdpull.click/api/workflows/results",
        "token": "Use the workflow token returned by the paid call."
      }
    },
    {
      "id": "bundle.rental-comps",
      "title": "Rental Comps Bundle",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "workflow",
      "family": "workflow-bundles",
      "method": "POST",
      "path": "/api/workflows/rental-comps",
      "url": "https://crowdpull.click/api/workflows/rental-comps",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.29",
        "max": "3.49"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": "rental-comps",
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": true,
      "async": true,
      "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
      },
      "example": {
        "input": {
          "location": "Detroit, MI",
          "maxItems": 20,
          "sources": [
            "zillow-listings-scraper",
            "apartments-com-rentals-scraper"
          ]
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/workflows/status",
        "results": "https://crowdpull.click/api/workflows/results",
        "token": "Use the workflow token returned by the paid call."
      }
    },
    {
      "id": "bundle.review-complaints",
      "title": "Review Complaint Mining Bundle",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "workflow",
      "family": "workflow-bundles",
      "method": "POST",
      "path": "/api/workflows/review-complaints",
      "url": "https://crowdpull.click/api/workflows/review-complaints",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.19",
        "max": "2.49"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": "review-complaints",
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": true,
      "async": true,
      "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
      },
      "example": {
        "input": {
          "productId": "1005006976494502",
          "maxItems": 25
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/workflows/status",
        "results": "https://crowdpull.click/api/workflows/results",
        "token": "Use the workflow token returned by the paid call."
      }
    },
    {
      "id": "bundle.hiring-signals",
      "title": "Hiring Signal Bundle",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "workflow",
      "family": "workflow-bundles",
      "method": "POST",
      "path": "/api/workflows/hiring-signals",
      "url": "https://crowdpull.click/api/workflows/hiring-signals",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.19",
        "max": "1.99"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": "hiring-signals",
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": true,
      "async": true,
      "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
      },
      "example": {
        "input": {
          "query": "registered nurse",
          "location": "Detroit, MI",
          "maxItems": 25
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/workflows/status",
        "results": "https://crowdpull.click/api/workflows/results",
        "token": "Use the workflow token returned by the paid call."
      }
    },
    {
      "id": "sku.instant-marketplace-leads",
      "title": "Instant Marketplace Leads",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "instant-cache",
      "family": "cached-results",
      "method": "POST",
      "path": "/api/instant/marketplace-leads",
      "url": "https://crowdpull.click/api/instant/marketplace-leads",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.01",
        "max": "1.99"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": "marketplace-leads",
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": true,
      "async": true,
      "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
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/workflows/status",
        "results": "https://crowdpull.click/api/workflows/results",
        "token": "Use the workflow token returned by the paid call."
      }
    },
    {
      "id": "monitor.watchlist",
      "title": "CrowdPull Watchlist",
      "department": "monitoring",
      "departmentLabel": "Monitoring",
      "kind": "monitor",
      "family": "recurring-monitoring",
      "method": "POST",
      "path": "/api/monitors/watchlist",
      "url": "https://crowdpull.click/api/monitors/watchlist",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.29",
        "max": "2.99"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": "marketplace-leads",
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": false,
      "async": false,
      "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
      },
      "example": {
        "input": {
          "workflow": "marketplace-leads",
          "query": "couch",
          "location": "Detroit, MI",
          "cadence": "daily",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/monitors/status",
        "token": "Use the monitor token returned by watchlist creation."
      }
    },
    {
      "id": "monitor.refresh",
      "title": "CrowdPull Watchlist Refresh",
      "department": "monitoring",
      "departmentLabel": "Monitoring",
      "kind": "monitor-refresh",
      "family": "recurring-monitoring",
      "method": "POST",
      "path": "/api/monitors/refresh",
      "url": "https://crowdpull.click/api/monitors/refresh",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.09",
        "max": "2.99"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": "marketplace-leads",
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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
      },
      "example": {
        "input": {
          "monitorToken": "MONITOR_TOKEN",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/workflows/status",
        "results": "https://crowdpull.click/api/workflows/results",
        "token": "Use the workflow token returned by the paid call."
      }
    },
    {
      "id": "tools.discovery-smoke",
      "title": "CrowdPull Discovery Smoke",
      "department": "agent-tools",
      "departmentLabel": "Agent Tools",
      "kind": "smoke-test",
      "family": "discovery-verification",
      "method": "POST",
      "path": "/api/smoke/discovery",
      "url": "https://crowdpull.click/api/smoke/discovery",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.001",
        "max": "0.001"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": false,
      "async": false,
      "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
      },
      "example": {
        "input": {
          "includeRoutes": false,
          "includeExamples": true
        }
      },
      "followup": null
    },
    {
      "id": "enrich.rows",
      "title": "CrowdPull Row Enrichment",
      "department": "enrichment",
      "departmentLabel": "Enrichment",
      "kind": "enrichment",
      "family": "data-enrichment",
      "method": "POST",
      "path": "/api/enrich/rows",
      "url": "https://crowdpull.click/api/enrich/rows",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "0.99"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": null,
      "nativeCandidate": false,
      "cacheable": false,
      "async": false,
      "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
      },
      "example": {
        "input": {
          "mode": "marketplace",
          "rows": [
            {
              "title": "Oak dining table",
              "price": "$80",
              "sourceUrl": "https://example.com/listing"
            }
          ]
        }
      },
      "followup": null
    },
    {
      "id": "source.facebook-marketplace-scraper",
      "title": "Facebook Marketplace Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "marketplace-listings",
      "method": "POST",
      "path": "/api/actors/facebook-marketplace-scraper/call",
      "url": "https://crowdpull.click/api/actors/facebook-marketplace-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.02",
        "max": "1.00"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "facebook-marketplace-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "searchQuery": "couch",
          "location": "Detroit, MI",
          "maxListings": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.offerup-scraper",
      "title": "OfferUp Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "marketplace-listings",
      "method": "POST",
      "path": "/api/actors/offerup-scraper/call",
      "url": "https://crowdpull.click/api/actors/offerup-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.02",
        "max": "1.00"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "offerup-scraper",
      "nativeCandidate": true,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "searchQuery": "couch",
          "location": "Detroit, MI",
          "maxListings": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.craigslist-scraper",
      "title": "Craigslist Classifieds Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "marketplace-listings",
      "method": "POST",
      "path": "/api/actors/craigslist-scraper/call",
      "url": "https://crowdpull.click/api/actors/craigslist-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "1.25"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "craigslist-scraper",
      "nativeCandidate": true,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.mercari-listings-scraper",
      "title": "Mercari Listings Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "marketplace-listings",
      "method": "POST",
      "path": "/api/actors/mercari-listings-scraper/call",
      "url": "https://crowdpull.click/api/actors/mercari-listings-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "1.00"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "mercari-listings-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.zillow-listings-scraper",
      "title": "Zillow Listings Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "real-estate-rentals",
      "method": "POST",
      "path": "/api/actors/zillow-listings-scraper/call",
      "url": "https://crowdpull.click/api/actors/zillow-listings-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.50"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "zillow-listings-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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"
              },
              "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "location": "Detroit, MI",
          "maxItems": 20
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.apartments-com-rentals-scraper",
      "title": "Apartments.com Rentals Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "real-estate-rentals",
      "method": "POST",
      "path": "/api/actors/apartments-com-rentals-scraper/call",
      "url": "https://crowdpull.click/api/actors/apartments-com-rentals-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.25"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "apartments-com-rentals-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.aliexpress-reviews-scraper",
      "title": "AliExpress Reviews Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "ecommerce-products-reviews",
      "method": "POST",
      "path": "/api/actors/aliexpress-reviews-scraper/call",
      "url": "https://crowdpull.click/api/actors/aliexpress-reviews-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.02",
        "max": "0.75"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "aliexpress-reviews-scraper",
      "nativeCandidate": true,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "productId": "1005006976494502",
          "maxReviewsPerProduct": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.target-products-scraper",
      "title": "Target Products Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "ecommerce-products-reviews",
      "method": "POST",
      "path": "/api/actors/target-products-scraper/call",
      "url": "https://crowdpull.click/api/actors/target-products-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "1.00"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "target-products-scraper",
      "nativeCandidate": true,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.flipkart-products-scraper",
      "title": "Flipkart Products Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "ecommerce-products-reviews",
      "method": "POST",
      "path": "/api/actors/flipkart-products-scraper/call",
      "url": "https://crowdpull.click/api/actors/flipkart-products-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.03",
        "max": "1.00"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "flipkart-products-scraper",
      "nativeCandidate": true,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.goodrx-drug-prices-scraper",
      "title": "GoodRx Drug Prices Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "health-prices",
      "method": "POST",
      "path": "/api/actors/goodrx-drug-prices-scraper/call",
      "url": "https://crowdpull.click/api/actors/goodrx-drug-prices-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.25"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "goodrx-drug-prices-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.crowdpull-ziprecruiter-jobs-scraper",
      "title": "ZipRecruiter Jobs Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "jobs-hiring",
      "method": "POST",
      "path": "/api/actors/crowdpull-ziprecruiter-jobs-scraper/call",
      "url": "https://crowdpull.click/api/actors/crowdpull-ziprecruiter-jobs-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.25"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "crowdpull-ziprecruiter-jobs-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.facebook-comment-scraper",
      "title": "Facebook Comment Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "facebook-data",
      "method": "POST",
      "path": "/api/actors/facebook-comment-scraper/call",
      "url": "https://crowdpull.click/api/actors/facebook-comment-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.04",
        "max": "1.25"
      },
      "x402": true,
      "status": "live",
      "description": "Start a capped CrowdPull Facebook Comment run for public comments and replies from supported public Facebook posts.",
      "tags": [
        "facebook",
        "comments",
        "social listening",
        "sentiment"
      ],
      "workflowKey": null,
      "sourceName": "facebook-comment-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.facebook-group-posts-scraper",
      "title": "Facebook Group Posts Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "facebook-data",
      "method": "POST",
      "path": "/api/actors/facebook-group-posts-scraper/call",
      "url": "https://crowdpull.click/api/actors/facebook-group-posts-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.04",
        "max": "1.25"
      },
      "x402": true,
      "status": "live",
      "description": "Start a capped CrowdPull Facebook Group Posts run for posts from supported public Facebook group pages.",
      "tags": [
        "facebook",
        "groups",
        "posts",
        "social listening"
      ],
      "workflowKey": null,
      "sourceName": "facebook-group-posts-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.facebook-page-posts-scraper",
      "title": "Facebook Page Posts Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "facebook-data",
      "method": "POST",
      "path": "/api/actors/facebook-page-posts-scraper/call",
      "url": "https://crowdpull.click/api/actors/facebook-page-posts-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.04",
        "max": "1.25"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "facebook-page-posts-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.facebook-profile-scraper",
      "title": "Facebook Profile Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "facebook-data",
      "method": "POST",
      "path": "/api/actors/facebook-profile-scraper/call",
      "url": "https://crowdpull.click/api/actors/facebook-profile-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.04",
        "max": "1.25"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "facebook-profile-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.instagram-scraper",
      "title": "Instagram Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "social-video-intelligence",
      "method": "POST",
      "path": "/api/actors/instagram-scraper/call",
      "url": "https://crowdpull.click/api/actors/instagram-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.50"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "instagram-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.youtube-scraper-intelligence",
      "title": "YouTube Scraper Intelligence",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "social-video-intelligence",
      "method": "POST",
      "path": "/api/actors/youtube-scraper-intelligence/call",
      "url": "https://crowdpull.click/api/actors/youtube-scraper-intelligence/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.50"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "youtube-scraper-intelligence",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    },
    {
      "id": "source.osha-violations-scraper",
      "title": "OSHA Violations Scraper",
      "department": "data",
      "departmentLabel": "Data",
      "kind": "source-call",
      "family": "public-records",
      "method": "POST",
      "path": "/api/actors/osha-violations-scraper/call",
      "url": "https://crowdpull.click/api/actors/osha-violations-scraper/call",
      "price": {
        "mode": "dynamic",
        "currency": "USD",
        "min": "0.05",
        "max": "1.25"
      },
      "x402": true,
      "status": "live",
      "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"
      ],
      "workflowKey": null,
      "sourceName": "osha-violations-scraper",
      "nativeCandidate": false,
      "cacheable": false,
      "async": true,
      "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": {
        "type": "object",
        "additionalProperties": true
      },
      "example": {
        "input": {
          "query": "example",
          "maxItems": 10
        }
      },
      "followup": {
        "status": "https://crowdpull.click/api/actors/status",
        "results": "https://crowdpull.click/api/actors/results",
        "token": "Use the token returned by the paid source call."
      }
    }
  ],
  "guidance": [
    "Use /api/quote when the buyer describes a goal but does not know the right route.",
    "Use /api/storefront for the complete SKU catalog with departments, price shape, examples, and endpoint URLs.",
    "For dynamic routes, send the intended input without payment first. CrowdPull returns a 402 payment challenge with the exact amount.",
    "After a paid asynchronous job starts, keep the returned token and use the matching status/results follow-up endpoints."
  ]
}