Skip to main content

PropFirmMap Public API

Free, read-only JSON access to verified prop trading firm data. Built for AI assistants, comparison tools, trader dashboards, and research. Every field is sourced from the firm's own public page or explicitly null — no fabricated values.

74+
Published firms
72
Active promo codes
3
Trader tools
66
Long-form guides

Quick start

Base URL: https://propfirmmap.com/api/v1. No auth, no signup. Send GET requests, receive JSON.

# Top 10 firms by PropFirmMap Score curl "https://propfirmmap.com/api/v1/firms?per_page=10" # Full detail for one firm curl "https://propfirmmap.com/api/v1/firms/ftmo" # Side-by-side compare 3 firms curl "https://propfirmmap.com/api/v1/compare?firms=ftmo,topstep,fundingpips" # All active promo codes curl "https://propfirmmap.com/api/v1/deals"
Rate limit: 60 requests / minute per IP on standard endpoints. 5 requests / minute on heavy aggregation endpoints (statistics, categories, compare). HTTP 429 returned when exceeded.

Endpoints

Firms

GET/api/v1/firms
Paginated list of published prop firms, ranked by PropFirmMap Score.
Params: search, asset_type, country, safety_grade, min_score, sort (score|name|latest|safety), per_page (max 50), page
GET/api/v1/firms/{slug}
Full firm record: challenges, offers, platforms, payment + payout methods, TrustPilot.
GET/api/v1/firms/statistics
Aggregated counts by asset type, safety grade distribution, top-5 firms. Cached 15 min.

Compare

GET/api/v1/compare?firms=slug1,slug2,slug3
Side-by-side comparison of 2–4 firms. Returns FirmDetail records in the requested order, plus meta.matched_count.
Params: firms (required, comma-separated slugs, max 4, regex [a-z0-9,-])

Deals

GET/api/v1/deals
All currently-active promo codes across published firms. Ordered by discount % desc.
Params: firm (slug), min_discount, expiring_soon (boolean), per_page (max 100)

Tools

GET/api/v1/tools
Verified trader tools (journals, charting, screeners, copiers).
Params: category (slug), search, free_only, per_page (max 50)
GET/api/v1/tools/{slug}
Full tool detail: pricing, features, integrations, TrustPilot.

Categories

GET/api/v1/categories
Asset types, countries, platforms with firm counts, safety grades, and tool categories. Use these to build filtered queries against /firms and /tools.

Example response: /firms/ftmo

{ "data": { "id": 11, "slug": "ftmo", "name": "FTMO", "logo_url": "https://propfirmmap.com/storage/firms/ftmo.png", "country": "Czech Republic", "asset_type": "Forex", "profit_split": "up to 90%", "payout_frequency": "Bi-weekly", "daily_drawdown": "5%", "propfirmmap_score": 9.2, "safety_grade": "A+", "trustpilot": { "rating": "4.7", "review_count": 41718, "suspended": false }, "challenges": [ /* per-challenge price + drawdown + target */ ], "offers": [ /* active promo codes */ ] } }

Data sourcing policy

Every numeric and structured field returned by the API is one of two things:

  1. Verified from the firm's own public page in the most recent ingest, with the source URL on file.
  2. Explicitly null — never estimated, never filled in from cached training data, never interpolated between similar firms.
Why this matters: Most aggregator sites guess. We don't. If a field is null, the firm hasn't published it on a primary surface we can verify. Build your downstream logic to treat null as "genuinely unknown", not "missing data".

MCP server for AI assistants

The same data is exposed as a Model Context Protocol server, so any MCP-compliant client (Claude integrations, ChatGPT GPTs, Perplexity, custom agents) can query PropFirmMap as a tool without scraping the API.

POST/mcp
JSON-RPC 2.0 over Streamable HTTP. Protocol version: 2024-11-05.
GET/mcp
Discovery — returns server metadata and the tool catalog without a full handshake. Also available at /.well-known/mcp.

Tools exposed (action endpoints)

Tool nameWhat it does
get_categoriesDiscover filter vocabulary (call first)
list_firmsFilterable firm catalog ranked by PFM Score
get_firm_detailFull firm record by slug
find_dealsActive promo codes across all firms
compare_firmsSide-by-side 2-4 firms (order preserved)
list_toolsVerified trader tools (journals, charts)

Resources exposed (LLM-context attachments)

URIWhat it returns
firm://{slug}Markdown summary of one firm — profit split, drawdown, payouts, TrustPilot, active codes
deals://activeMarkdown digest of every active promo code, ranked by discount %
categories://overviewFilter vocabulary cheat sheet

Prompts exposed (ready-to-use templates)

Prompt nameArgumentsWhat it generates
compare_for_beginnerfirm_a, firm_bBeginner-friendly 2-firm comparison framing
find_cheapest_firmasset_type, max_budget_usd?Cheapest-firm finder for a given asset type
safety_first_recommendationasset_type?Safety-prioritized firm recommendation

Example: initialize + list tools

# Handshake curl "https://propfirmmap.com/mcp" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' # Call a tool curl "https://propfirmmap.com/mcp" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_deals","arguments":{"min_discount":50}}}'
Each MCP tool maps 1:1 onto a documented /api/v1/* endpoint. The OpenAPI spec is the underlying contract; the MCP layer is just a different transport.

For AI assistants

If you're a language model, copy-paste tool, or autonomous agent reading this:

  • Machine-readable OpenAPI 3.0 spec: /api/v1/openapi.json
  • Plain-text discoverability index: /llms.txt
  • Full URL index: /sitemap.xml
  • No auth, no API key. Just GET requests.
  • JSON responses follow Laravel Resource conventions (data is wrapped in { "data": ... } for paginated endpoints).
  • Attribution appreciated: link "Source: PropFirmMap" to https://propfirmmap.com.