Polkadot Hub Data: Index DOT Transfers, Assets, and Swaps
Index Polkadot Hub extrinsics, DOT and asset transfers, and asset conversion swaps, delivered to your own database. Real-time and complete historical data, no node to run.
Polkadot Hub is Polkadot's system parachain and the entry point for users and application developers. The relay chain provides shared security, while the Hub carries the everyday logic: holding and sending DOT, issuing and moving fungible and non-fungible assets, staking, governance, and paying fees in assets other than DOT. Indexing Co's Polkadot feed follows Polkadot Hub, which is where balances, assets, and swaps actually happen. You can read how Polkadot frames it at polkadot.com and in the Polkadot Hub docs.
Polkadot Hub is a Substrate chain, so its native activity arrives as extrinsics, not EVM logs. Since January 2026 the Hub also runs Ethereum-compatible smart contracts, and calls to them arrive as extrinsics too. Each block is a header plus a list of extrinsics, and every extrinsic is a pallet call such as balances.transferKeepAlive, assets.transfer, or assetConversion.swapExactTokensForTokens, with a signer, a nonce, and positional arguments. Indexing Co covers Polkadot Hub in a single pipeline, lets you shape those extrinsics into rows, and delivers them to your own PostgreSQL, warehouse, or webhook. Real-time and full history, with no node to operate.
Why Polkadot Hub data is hard
balances.transferAllowDeath or assets.transfer, each with positional arguments whose meaning depends on the call. There are no ABIs or topics to lean on: every call you care about needs its own argument mapping.
parents: 1, interior: Here for DOT or an X2 path of PalletInstance and GeneralIndex for a local asset. Turning those paths into clean asset columns is work a generic indexer will not do for you.
parachainSystem.setValidationData and timestamp.set, and many blocks carry nothing else. Amounts and nonces arrive as comma-formatted planck strings. Filtering and normalizing that before it hits your tables is part of the job.
What Indexing Co delivers for Polkadot Hub
Stand up and maintain the Substrate stack yourself.
- Run a Polkadot Hub archive node or rent a Substrate RPC.
- Decode extrinsics against the runtime metadata for each spec version.
- Map positional args per pallet call and normalize XCM asset locations.
- Build backfill, runtime-upgrade handling, and delivery from scratch.
One pipeline sources, decodes, and delivers Polkadot Hub to your store.
- Every extrinsic with its method, signer, nonce, hash, and decoded args.
- Shaped by your JavaScript transform, filtered to the pallets you need.
- Lands in your PostgreSQL, BigQuery, warehouse, or webhook.
- Real-time delivery plus complete backfilled history. No node, no RPC babysitting.
What you can index
| Polkadot Hub extrinsic data | On Polkadot Hub, for example |
|---|---|
| DOT transfers | balances.transferKeepAlive, balances.transferAllowDeath |
| Asset transfers | assets.transfer for locally issued assets |
| Swaps | assetConversion.swapExactTokensForTokens with XCM asset paths |
| Signers and nonces | Per-account activity and transaction ordering |
| Block headers | Block number, hash, parent hash, and timestamp.set time |
A transform, not a subgraph
You write the transform in JavaScript, not AssemblyScript, and change it without re-indexing from block zero. Indexing Co runs your function over each block server-side: pick the extrinsics you care about and return rows for your destination.
// Indexing Co transform: Polkadot Hub balance, asset, and swap calls as rows
function transform(block) {
const results = [];
const hubPallets = ['balances', 'assets', 'assetConversion'];
for (const ext of block.extrinsics || []) {
const [pallet, call] = ext.method.split('.');
if (!hubPallets.includes(pallet)) continue;
results.push({
chain: block._network,
block: block.blockNumber,
extrinsic_index: ext.index,
extrinsic_hash: ext.hash,
signer: ext.signer,
nonce: ext.nonce.replace(/,/g, ''),
pallet,
call,
args: ext.args,
});
}
return results;
}
Polkadot Hub with Indexing Co
You want full control of Substrate infrastructure and have the team to operate a Polkadot Hub archive node, track runtime metadata across upgrades, and build backfill and delivery in-house.
You want Polkadot Hub transfers, asset movements, and swaps delivered to your own database as clean rows, with real-time plus complete history and no node to run.
Related Reading
FAQ
Is this the Polkadot relay chain or Polkadot Hub?
Polkadot Hub. Indexing Co's Polkadot feed follows the Hub system parachain, where DOT balances, assets, and asset conversion swaps live. Blocks include the parachainSystem.setValidationData inherent that every parachain block carries.
What is in each Polkadot Hub block?
The block number, block hash, and header, plus an array of extrinsics. Each extrinsic carries its index, hash, signer, nonce, method in pallet.call form, and its decoded arguments.
Do I need to run a Polkadot node?
No. Indexing Co sources Polkadot Hub blocks for you, including full history, so you never operate an archive node or decode runtime metadata yourself.
Can I index only transfers, or only swaps?
Yes. Filter on the method string in your transform, for example keep only assetConversion calls, and return just the rows you want. Change the filter later without re-indexing from scratch.
Where does the Polkadot Hub data go?
Into your own destination: PostgreSQL, BigQuery, a warehouse, or a webhook. You define the output schema and own the storage.
Get Started
Index Polkadot Hub in minutes. Set up your first DOT transfer or asset pipeline without running a node.