Propfirmmatch APIpropfirmmatch.com ↗
Access real-time proprietary trading firm challenge data including futures and forex opportunities, filter by your preferences, and browse available firms to find the perfect trading challenge. Get detailed information about challenge requirements, firm listings, and all available filtering options to streamline your search for the right prop trading opportunity.
curl -X GET 'https://api.parse.bot/scraper/b5c524ed-5dfc-40f6-8174-998da8752b14/list_challenges?skip=0&limit=10&steps=1+Step&assets=futures&search=lucid&order_by=popularityRank&account_size=50000&billing_type=monthly%2Cone_time&apply_discount=true&order_direction=desc' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace propfirmmatch-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: PropFirmMatch SDK — compare futures prop firm challenges."""
from parse_apis.propfirmmatch_com_api import (
PropFirmMatch, OrderBy, OrderDirection, Category, InputFormatInvalid
)
client = PropFirmMatch()
# List all futures prop firms and their ratings.
for firm in client.firms.list(category=Category.FUTURES, limit=5):
print(f"{firm.name} — score: {firm.review_score}, reviews: {firm.reviews_count}")
# Search challenges filtered by asset, account size, and step count.
challenge = client.challenges.search(
assets=Category.FUTURES,
account_size="50000",
steps="1 Step",
order_by=OrderBy.PRICE,
order_direction=OrderDirection.ASC,
limit=1,
).first()
if challenge:
print(f"\nCheapest 50K 1-Step: {challenge.name}")
print(f" Price: ${challenge.discounted_price} (was ${challenge.price})")
print(f" Profit split: {challenge.profit_split}%, Max drawdown: {challenge.max_drawdown}%")
print(f" Platforms: {', '.join(challenge.platforms)}")
if challenge.promos:
promo = challenge.promos[0]
print(f" Promo: {promo.code} — {promo.description}")
# Get available filtering options to discover valid account sizes and limits.
options = client.filtering_optionses.get()
print(f"\nFilter limits: account size ${options.limits['accountSizeMin']}–${options.limits['accountSizeMax']}")
print(f"Platforms available: {len(options.platforms)}")
print(f"Countries supported: {len(options.countries)}")
# Demonstrate typed error handling.
try:
client.challenges.search(limit=1, skip=-1).first()
except InputFormatInvalid as exc:
print(f"\nValidation error: {exc}")
print("\nexercised: firms.list / challenges.search / filtering_optionses.get / InputFormatInvalid")
Search and filter prop firm challenges (evaluation programs). Returns challenge data including pricing, profit targets, drawdown limits, payout info, and active promos. Supports filtering by asset class, account size, number of steps, billing type, and text search. Manual offset pagination via skip/limit.
| Param | Type | Description |
|---|---|---|
| skip | integer | Number of results to skip for pagination. |
| limit | integer | Number of results to return per page (1-100). |
| steps | string | Comma-separated challenge step programs to filter by (e.g. '1 Step', '2 Step', '3 Step'). Omitted returns all programs. |
| assets | string | Comma-separated asset classes to filter by (e.g. futures, forex, crypto). |
| search | string | Text search query to filter challenges by name or firm name. Omitted returns all. |
| order_by | string | Field to order results by. |
| account_size | string | Comma-separated account sizes in USD to filter by (e.g. 50000,100000,150000). |
| billing_type | string | Comma-separated billing types: monthly, one_time. |
| apply_discount | boolean | Whether to apply available discounts to prices. |
| order_direction | string | Sort direction for results. |
{
"type": "object",
"fields": {
"count": "integer total matching challenges",
"has_more": "boolean indicating more pages available",
"next_skip": "integer skip value for next page",
"challenges": "array of challenge objects with pricing, targets, drawdown, firm info, platforms, and promos"
},
"sample": {
"data": {
"count": 56,
"has_more": true,
"next_skip": 3,
"challenges": [
{
"id": "yuhuqizaqg0v0tp7bu03mlg4",
"name": "Lucid Trading - LucidPro 1-Step - 50K",
"slug": "lucid-trading-lucidpro-1-step-50k",
"price": 185,
"steps": "1 Step",
"promos": [
{
"code": "MATCH",
"description": "40% off + No DLL on Pro accounts",
"discount_amount": 40,
"discount_strategy": "percentage"
}
],
"firm_name": "Lucid Trading",
"firm_rank": 5,
"firm_slug": "lucid-trading",
"platforms": [
"Tradovate",
"Sierra Chart",
"Bookmap"
],
"pt_dd_ratio": 0.67,
"account_size": 50000,
"billing_type": "one_time",
"max_drawdown": 4,
"profit_split": 90,
"max_loss_type": "EODTrailing",
"max_daily_loss": null,
"max_micros_size": "40",
"consistency_rule": "- Evaluation stage: None\n- Funded stage: 40%",
"discounted_price": 111,
"payout_frequency": 3,
"firm_review_score": 4.6,
"max_contract_size": "4",
"profit_target_sum": 6,
"firm_reviews_count": 87,
"minimum_trading_days": null,
"activation_fee_amount": 0,
"maximum_payout_amount": "$2,000",
"minimum_payout_threshold": "$500",
"payout_frequency_description": "Every 3 Days"
}
]
},
"status": "success"
}
}About the Propfirmmatch API
The Propfirmmatch API on Parse exposes 3 endpoints for the publicly available data on propfirmmatch.com. Calls return JSON over HTTPS and are billed per successful response.
Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.