Polymarket Wallet Portfolio & Trade History Scraper
Pricing
Pay per event
Polymarket Wallet Portfolio & Trade History Scraper
π Export public Polymarket wallets into clean positions, PnL, trades, activity, and portfolio snapshots. No login, signature, browser, or proxy required.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Export public Polymarket wallet positions, PnL, trades, activity, and portfolio value to clean CSV, JSON, Excel, or API-ready dataset records.
Give the Actor one or more Polymarket proxy-wallet addresses. It queries Polymarket's official public Data API, follows pagination, normalizes the response, removes duplicates, and stores analysis-ready rows.
No login, wallet signature, private key, browser, or proxy is required.
What does Polymarket Wallet Portfolio & Trade History Scraper do?
The Actor turns a public wallet address into a complete wallet intelligence export.
It can collect:
- π current open positions and token sizes
- β closed positions and realized PnL
- π BUY and SELL trade history
- βοΈ TRADE, SPLIT, MERGE, REDEEM, REWARD, and conversion activity
- π΅ aggregate current portfolio value
- π― market, asset, condition, event, and transaction identifiers
- π€ public trader profile fields attached to history rows
Select only the modes you need or combine them into one normalized wallet dataset.
Why use this Polymarket wallet scraper?
Public Polymarket responses are useful but spread across several endpoints and use different field shapes.
This Actor gives you one stable contract.
- β Submit several wallets in one run.
- β Export positions, trades, activity, and value together.
- β Filter trade/activity history by date and side.
- β Filter records by market condition ID.
- β Retain transaction hashes and raw join identifiers.
- β Schedule recurring portfolio snapshots on Apify.
- β Continue other wallets when one endpoint fails.
- β Use conservative retries and concurrency against the public API.
The result is easier to load into spreadsheets, databases, notebooks, dashboards, and AI agents than raw endpoint responses.
Who is it for?
Prediction-market traders can inspect a public account's exposure, entry prices, and PnL.
Whale and copy-trading researchers can maintain watchlists and compare wallet behavior over time.
Portfolio analysts can schedule snapshots and calculate changes between runs.
Tax and reconciliation teams can export transaction hashes, trades, redemptions, and realized outcomes.
Quant researchers can join trades to market or token datasets through condition and asset IDs.
Bot and data teams can consume typed records through the Apify API, webhooks, datasets, or MCP.
This Actor is for public research and data automation. It does not place orders, access private accounts, or provide investment advice.
What data can you extract?
Every row includes a recordType, wallet, source URL, and scrape timestamp.
| Field | Description |
|---|---|
recordType | position, closed_position, trade, activity, or portfolio_value |
wallet | Normalized public Polymarket proxy-wallet address |
assetId | Outcome token asset ID |
conditionId | Market condition ID |
eventId | Polymarket event identifier when supplied |
title | Market title |
marketSlug | Market slug |
eventSlug | Parent event slug |
outcome | Outcome name |
size | Position, trade, or activity token size |
side | BUY or SELL |
activityType | On-chain activity category |
averagePrice | Position average entry price |
currentPrice | Current outcome price |
tradePrice | Trade or activity price |
initialValue | Initial position value |
currentValue | Current position value |
portfolioValue | Aggregate current position value |
cashPnl | Unrealized cash PnL |
percentPnl | Unrealized percentage PnL |
realizedPnl | Realized PnL |
timestamp | Upstream epoch timestamp |
timestampIso | Normalized ISO timestamp |
endDate | Market end date |
transactionHash | Polygon transaction hash |
traderName | Public profile name |
pseudonym | Public Polymarket pseudonym |
sourceUrl | Exact Data API URL used |
scrapedAt | ISO extraction timestamp |
Fields that do not apply to a row type are omitted instead of filled with misleading values.
Supported wallet record modes
Open positions
Returns active wallet exposure with token size, average price, current price, initial/current value, unrealized and realized PnL, outcome, and redeemability fields.
Closed positions
Returns settled or exited positions with total bought, realized PnL, close timestamp, market details, and outcome identifiers.
Trades
Returns BUY/SELL fills with size, price, timestamp, market metadata, public profile fields, and transaction hash.
Activity
Returns public on-chain activity such as trades, splits, merges, redemptions, rewards, and conversions.
Portfolio value
Returns the wallet's current aggregate Polymarket position value as one snapshot row.
Input
The smallest useful input is:
{"wallets": ["0x204f72f35326db932158cba6adff0b9a1da95e14"],"modes": ["positions", "portfolio_value"],"maxItemsPerWallet": 20}
| Input | Type | Default | Purpose |
|---|---|---|---|
wallets | string array | required | Public Polymarket proxy-wallet addresses |
modes | string array | positions, trades, activity, value | Record families to export |
maxItemsPerWallet | integer | 100 | Cap for each wallet and selected mode |
marketIds | string array | none | Filter by condition IDs |
startDate | string | none | ISO lower date bound for trades/activity |
endDate | string | none | ISO upper date bound for trades/activity |
side | BUY or SELL | both | Trade/activity side filter |
activityTypes | string array | all | Activity categories to include |
minPositionSize | number | 1 | Minimum open position token size |
maxConcurrency | integer | 3 | Concurrent wallet-mode requests, maximum 5 |
maxItemsPerWallet applies independently to every mode. A cap of 100 with three selected history modes can therefore save up to 300 history records for one wallet, plus one value row.
How to find a Polymarket proxy-wallet address
Open a public trader profile on Polymarket and copy its displayed wallet/profile address.
The required format is:
0x + 40 hexadecimal characters
The Actor validates every address before making requests. It lowercases addresses for reliable deduplication.
Do not submit a private key or seed phrase. The Actor never needs one.
Filter examples
Export SELL trades since January 1, 2026:
{"wallets": ["0x56687bf447db6ffa42ffe2204a05edaa20f55839"],"modes": ["trades"],"side": "SELL","startDate": "2026-01-01","maxItemsPerWallet": 500}
Monitor redemption and merge activity:
{"wallets": ["0x56687bf447db6ffa42ffe2204a05edaa20f55839"],"modes": ["activity"],"activityTypes": ["REDEEM", "MERGE"],"maxItemsPerWallet": 250}
Use marketIds when you need wallet records for known Polymarket condition IDs.
Output example
A position row looks like this:
{"recordType": "position","wallet": "0x204f72f35326db932158cba6adff0b9a1da95e14","assetId": "1234567890","conditionId": "0x1234...abcd","title": "Will this market resolve Yes?","outcome": "Yes","size": 120.5,"averagePrice": 0.42,"currentPrice": 0.58,"currentValue": 69.89,"cashPnl": 19.28,"percentPnl": 38.1,"sourceUrl": "https://data-api.polymarket.com/positions?...","scrapedAt": "2026-07-14T02:00:00.000Z"}
Actual values always come from the public upstream response.
How to run the Actor
- Open the Actor input page.
- Paste one or more public wallet addresses.
- Select the record modes you need.
- Keep the first test cap low, such as 20.
- Add optional date, market, side, or activity filters.
- Click Start.
- Export the dataset as JSON, CSV, Excel, XML, or RSS.
For scheduled monitoring, save the input as an Apify task and attach a schedule.
How much does it cost to scrape Polymarket wallet history?
The Actor uses pay-per-event pricing:
- $0.005 once when a run starts
- $0.00004569 per wallet record on the BRONZE plan
- automatic volume discounts down to $0.000012793 per record on DIAMOND
You pay only for records actually saved. A small 20-record snapshot costs about $0.0059 at the BRONZE price before platform plan details.
The HTTP-only implementation uses 256 MB memory and no paid proxy traffic, keeping compute overhead low.
Check the pricing tab for your current Apify plan's exact tier price.
Scheduling wallet snapshots
A schedule turns the Actor into a simple portfolio monitor.
Recommended pattern:
- Create a task with
positionsandportfolio_valuemodes. - Add the wallets in your watchlist.
- Set a conservative per-mode cap.
- Run hourly, daily, or weekly.
- Send the dataset through a webhook or integration.
- Compare the newest snapshot with the previous run.
For incremental activity exports, set startDate to the beginning of your required window and deduplicate downstream by wallet, recordType, and transactionHash.
Integrations
Use built-in Apify integrations to connect wallet records to:
- Google Sheets for a research watchlist
- Slack for new trade or redemption alerts
- Make for no-code portfolio workflows
- Zapier for notifications and CRM actions
- webhooks for run-completion processing
- Amazon S3 or cloud storage for archives
- Python/R notebooks for strategy research
- database loaders for historical analytics
A practical alert workflow filters new trade records after a scheduled run and sends only unseen transaction hashes.
API usage with Apify
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/polymarket-wallet-portfolio-trade-history-scraper').call({wallets: ['0x56687bf447db6ffa42ffe2204a05edaa20f55839'],modes: ['trades', 'activity'],maxItemsPerWallet: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/polymarket-wallet-portfolio-trade-history-scraper').call(run_input={'wallets': ['0x56687bf447db6ffa42ffe2204a05edaa20f55839'],'modes': ['positions', 'portfolio_value'],'maxItemsPerWallet': 50,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~polymarket-wallet-portfolio-trade-history-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"wallets":["0x56687bf447db6ffa42ffe2204a05edaa20f55839"],"modes":["trades"],"maxItemsPerWallet":50}'
Use with MCP and AI agents
Claude Code
Connect Apify's MCP server with the exact Claude Code command:
claude mcp add --transport http apify \"https://mcp.apify.com/?tools=automation-lab/polymarket-wallet-portfolio-trade-history-scraper"
Claude Desktop
Add this server to Claude Desktop's mcpServers configuration:
{"mcpServers": {"apify-polymarket-wallet": {"url": "https://mcp.apify.com/?tools=automation-lab/polymarket-wallet-portfolio-trade-history-scraper"}}}
Cursor
Open Cursor MCP settings and add the same mcpServers JSON. Restart Cursor so the Polymarket wallet tool appears in the available tool list.
VS Code
In VS Code with MCP support, add the HTTP server URL to your workspace MCP configuration and enable the apify-polymarket-wallet server.
Example prompts:
- βExport open positions and portfolio value for these three public Polymarket wallets.β
- βGet SELL trades for this wallet since 2026-01-01 and summarize realized outcomes.β
- βMonitor redemption and merge activity for my public whale watchlist.β
- βJoin these wallet trades by condition ID with my Polymarket market table.β
AI-generated analysis can be wrong; verify financial conclusions against source records.
Reliability and pagination
The Actor follows each endpoint's documented offset pagination limits.
It uses:
- bounded concurrency of at most five requests
- exponential backoff for 429, 5xx, timeout, and network errors
- a 20-second timeout per attempt
- per-wallet and per-mode error isolation
- duplicate keys appropriate to each record family
- exact source URLs for traceability
If one wallet mode fails after retries, other wallet jobs continue. The run fails only when every requested wallet-mode job fails and no data can be saved.
Polymarket currently caps some API offsets at 10,000. The Actor logs a warning if a requested history reaches that upstream boundary.
Data freshness and limitations
Results reflect the public Polymarket Data API at run time.
Keep these limitations in mind:
- Portfolio value is a snapshot, not account cash balance.
- Prices and PnL can move after extraction.
- Public history may be updated or corrected upstream.
- Very large histories are subject to Polymarket offset limits.
- Transaction-hash deduplication can collapse duplicate endpoint rows.
- The Actor does not calculate taxes, cost basis, win rate, or investment recommendations.
- This Actor targets the global Polymarket Data API, not private account data.
Use recurring runs when freshness matters.
Tips for better results
- Start with
positionsandportfolio_valueto verify an address. - Add
tradesoractivityafter confirming the wallet is active. - Use a date window for recurring history exports.
- Use
marketIdsto reduce broad histories. - Set
minPositionSizeto0when tiny positions matter. - Keep concurrency at 3 unless you have many wallets.
- Use transaction hashes and asset IDs as durable downstream keys.
- Preserve
sourceUrlin audits and reconciliation exports.
Legality of scraping public Polymarket wallet data
The Actor accesses Polymarket's documented, public, no-auth Data API.
Public availability does not remove your responsibilities. Follow applicable laws, Polymarket's terms, privacy requirements, and your organization's policies. Do not use the data for harassment, unlawful profiling, market manipulation, or deceptive claims.
Wallet activity is pseudonymous, not necessarily anonymous. Avoid claiming that a wallet belongs to a real person without reliable lawful evidence.
This Actor is an independent data tool and is not affiliated with or endorsed by Polymarket.
FAQ
Does it require my Polymarket login or wallet signature?
No. It reads only public wallet data. Never submit a private key, seed phrase, session cookie, or API credential.
Why did a wallet return no open positions?
The wallet may have no current exposure, may use a different proxy-wallet address, or all positions may be smaller than minPositionSize. Try setting minPositionSize to 0 and include closed_positions or trades.
Why are some fields missing on a row?
Different Polymarket record families expose different fields. The Actor omits fields that do not apply instead of filling them with fake values.
Can I export complete historical trades?
Use trades, a positive start date far enough in the past, and a higher cap. Extremely large histories remain subject to the public API's offset boundary.
Can I monitor many wallets?
Yes. Submit up to 100 addresses and schedule the task. Keep the item cap and frequency proportional to the watchlist.
Does it place trades or score wallets?
No. It exports public records. Trading, scoring, copy-trading decisions, and alerts belong in your downstream workflow.
What should I do after an API rate-limit warning?
The Actor retries automatically. If failures persist, lower maxConcurrency or rerun later rather than increasing concurrency.
Related Polymarket scrapers
Use Polymarket Markets Scraper to discover markets, outcomes, prices, liquidity, and volume before joining them to wallet records.
Use Polymarket Leaderboard Scraper to discover ranked top traders before exporting selected wallets here.
Together they support a complete workflow:
- discover active markets,
- discover public top traders,
- export arbitrary wallet records,
- schedule snapshots,
- join by wallet, condition ID, asset ID, or transaction hash.
Support
If a valid public wallet produces unexpected output, open an issue from the Actor page.
Include:
- the public wallet address
- selected modes and filters
- the run URL
- the expected record family
- whether the upstream public profile still shows activity
Do not include private keys, seed phrases, or confidential account information.