Skip to main content

App Timelines

Presents the onchain activity for a specific application by monitoring transactions through its smart contracts. This endpoint enables you to track all interactions with a particular protocol or dapp across multiple networks.

timelineForApp

Takes an app slug as input, with optional parameters for network, and spamFilter. Returns chronological on-chain activity including:

Example Use Case: Protocol Activity Feed

Let's say you want to build a real-time activity feed showing all transactions happening in a specific app like Uniswap or Aave. Start by passing the app's slug. The query returns:

  • Human-readable transaction descriptions (processedDescription)
  • Network information
  • Complete transaction details
  • Comprehensive data about tokens or NFTs involved
  • Account information for transaction actors

This allows you to build rich activity feeds with:

  • Formatted descriptions (e.g., "Swapped 400 USDC for 0.2 ETH")
  • Complete token details including amounts and prices
  • NFT transfers and metadata when relevant
  • Links to relevant accounts and transactions
tip

To find the correct slug for the app you are trying to reference, find the app on Zapper. The slug is the last part of the URL. For example: https://zapper.xyz/apps/aave-v3 has the slug aave-v3.

Example Variables

{
"slug": "aave-v3",
"first": 1,
"spamFilter": true
}

Example Query

query TimelineForAppQuery($slug: String!, $first: Int, $after: String, $spamFilter: Boolean) {
timelineForApp(
slug: $slug
first: $first
after: $after
spamFilter: $spamFilter
) {
edges {
node {
timestamp
network
transaction {
hash
fromUser {
address
displayName {
value
}
}
toUser {
displayName {
value
}
}
}
interpretation {
processedDescription
description
descriptionDisplayItems {
... on TokenDisplayItem {
type
network
tokenAddress
amountRaw
tokenV2 {
symbol
decimals
name
imageUrl
marketData {
price(currency: USD)
}
}
}
... on NFTDisplayItem {
type
network
collectionAddress
tokenId
quantity
nftToken {
collection {
name
}
}
}
}
inboundAttachments {
... on TokenDisplayItem {
type
network
tokenAddress
amountRaw
}
}
outboundAttachments {
... on TokenDisplayItem {
type
network
tokenAddress
amountRaw
}
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}

Example Response

{
"data": {
"timelineForApp": {
"edges": [
{
"node": {
"timestamp": 1736898059000,
"network": "BASE_MAINNET",
"transaction": {
"hash": "0x49309cb747b17b6c6c2cfffc977424a6d38593efe2f5d01db5d3445507191ab2",
"fromUser": {
"address": "0x318bb34e1387af6034950ef66c798d16e72be287",
"displayName": {
"value": "0x318b...e287"
}
},
"toUser": {
"displayName": {
"value": "0xa238...d1c5"
}
}
},
"interpretation": {
"processedDescription": "Repaid 144 USDC ",
"description": "Repaid $1 ",
"descriptionDisplayItems": [
{
"type": "token",
"network": "BASE_MAINNET",
"tokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"amountRaw": "144000000",
"tokenV2": {
"symbol": "USDC",
"decimals": 6,
"name": "USDC",
"imageUrl": "https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.png",
"marketData": {
"price": 0.999999
}
}
}
],
"inboundAttachments": [],
"outboundAttachments": [
{
"type": "token",
"network": "BASE_MAINNET",
"tokenAddress": "0x59dca05b6c26dbd64b5381374aaac5cd05644c28",
"amountRaw": "137792975"
},
{
"type": "token",
"network": "BASE_MAINNET",
"tokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"amountRaw": "144000000"
}
]
}
}
}
],
"pageInfo": {
"hasNextPage": true,
"endCursor": "MjAyNC0xMi0wNlQyMTowNTo..."
}
}
}
}
Try in sandbox
tip

To create interactive elements referencing tokens, NFTs, accounts, or other onchain items embedded within the transaction description, use description and descriptionDisplayItems instead of processedDescription. This enables you to add links to tokens, NFTs, or accounts (e.g., cl0kwork.eth supplied 50 ETH as collateral).

note

Pagination is highly recommended using first and after to ensure fast query response times and optimal performance.

Arguments

ArgumentDescriptionType
slugThe unique identifier for the app (e.g., "uniswap", "aave-v2")String!
networkFilter by a specific networkNetwork
networksFilter by multiple networks, input as an array[Network!]
realtimeInterpretationEnable human-readable transactions (default: true)Boolean
spamFilterFilter out spam transactions (default: true)Boolean
firstNumber of items to return (for pagination)Int
afterCursor for paginationString

Fields

Main Fields

FieldDescriptionType
keyA unique identifierString!
networkNetwork where the transaction occurredNetwork!
timestampUnix timestamp in millisecondsTimestamp!
transactionContains detailed transaction informationOnChainTransaction!
interpretationContains human-readable descriptions and asset transfersActivityInterpretation!

Transaction Fields

FieldDescriptionType
hashTransaction hashString!
fromUserThe initiating address with detailsAccount!
toUserThe receiving address with detailsAccount!
valueTransaction value in weiString!

Interpretation Fields

FieldDescriptionType
descriptionHuman-readable description with variablesString!
processedDescriptionFully processed human-readable descriptionString!
descriptionDisplayItemsReferences for variables in the description[ActivityFeedDisplayItem!]!
inboundAttachmentsAssets received in the transaction[ActivityFeedDisplayItem!]!
outboundAttachmentsAssets sent in the transaction[ActivityFeedDisplayItem!]!

Account Fields

FieldDescriptionType
addressThe wallet addressAddress!
displayNameThe account's display name (ENS, Lens, etc.)DisplayName!

Delta Fields

FieldDescriptionType
perspectiveDeltaContains token and NFT changes from the actor's perspectiveActivityAccountDelta!
tokenDeltasV2Token transfer details including amounts and token infoFungibleTokenDeltaConnection!
nftDeltasV2NFT transfer details including collection and token infoNftDeltaConnection!
tip

When working with token amounts, remember to divide amountRaw by 10^decimals to get the human-readable amount. For example, an amountRaw of "50000000000000000000" with 18 decimals represents 50 ETH.

note

All fields marked with ! are required fields in the response.