Polymarket Wallet Portfolio & Trade History Scraper avatar

Polymarket Wallet Portfolio & Trade History Scraper

Pricing

Pay per event

Go to Apify Store
Polymarket Wallet Portfolio & Trade History Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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.

FieldDescription
recordTypeposition, closed_position, trade, activity, or portfolio_value
walletNormalized public Polymarket proxy-wallet address
assetIdOutcome token asset ID
conditionIdMarket condition ID
eventIdPolymarket event identifier when supplied
titleMarket title
marketSlugMarket slug
eventSlugParent event slug
outcomeOutcome name
sizePosition, trade, or activity token size
sideBUY or SELL
activityTypeOn-chain activity category
averagePricePosition average entry price
currentPriceCurrent outcome price
tradePriceTrade or activity price
initialValueInitial position value
currentValueCurrent position value
portfolioValueAggregate current position value
cashPnlUnrealized cash PnL
percentPnlUnrealized percentage PnL
realizedPnlRealized PnL
timestampUpstream epoch timestamp
timestampIsoNormalized ISO timestamp
endDateMarket end date
transactionHashPolygon transaction hash
traderNamePublic profile name
pseudonymPublic Polymarket pseudonym
sourceUrlExact Data API URL used
scrapedAtISO 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
}
InputTypeDefaultPurpose
walletsstring arrayrequiredPublic Polymarket proxy-wallet addresses
modesstring arraypositions, trades, activity, valueRecord families to export
maxItemsPerWalletinteger100Cap for each wallet and selected mode
marketIdsstring arraynoneFilter by condition IDs
startDatestringnoneISO lower date bound for trades/activity
endDatestringnoneISO upper date bound for trades/activity
sideBUY or SELLbothTrade/activity side filter
activityTypesstring arrayallActivity categories to include
minPositionSizenumber1Minimum open position token size
maxConcurrencyinteger3Concurrent 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

  1. Open the Actor input page.
  2. Paste one or more public wallet addresses.
  3. Select the record modes you need.
  4. Keep the first test cap low, such as 20.
  5. Add optional date, market, side, or activity filters.
  6. Click Start.
  7. 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:

  1. Create a task with positions and portfolio_value modes.
  2. Add the wallets in your watchlist.
  3. Set a conservative per-mode cap.
  4. Run hourly, daily, or weekly.
  5. Send the dataset through a webhook or integration.
  6. 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 ApifyClient
import os
client = 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().items
print(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 positions and portfolio_value to verify an address.
  • Add trades or activity after confirming the wallet is active.
  • Use a date window for recurring history exports.
  • Use marketIds to reduce broad histories.
  • Set minPositionSize to 0 when tiny positions matter.
  • Keep concurrency at 3 unless you have many wallets.
  • Use transaction hashes and asset IDs as durable downstream keys.
  • Preserve sourceUrl in 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.

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:

  1. discover active markets,
  2. discover public top traders,
  3. export arbitrary wallet records,
  4. schedule snapshots,
  5. 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.