let query = ActivitiesQuery(
filter: .equal(.type, "post"),
sort: [Sort(field: .createdAt, direction: .reverse)],
limit: 10
)
let activities = try await feed.queryActivities(with: query)
Activity Feeds V3 is in closed alpha — do not use it in production (just yet).
Querying Activities
Activity Search & Queries
You can query & search activities. Here’s an example of how to query activities:
client.queryActivities({
filter: {
type: "post",
},
sort: [{ field: "created_at", direction: -1 }],
limit: 10,
});
client.feeds.queryActivities({
filter: {
type: "post",
},
sort: [{ field: "created_at", direction: -1 }],
limit: 10,
});
The syntax emulates a MongoDB style query syntax. (It emulates it, we don’t use MongoDB, but the query syntax is nice here).
Querying activities by text
// search for activities where the text includes the word 'popularity'.
let query = ActivitiesQuery(
filter: .query(.text, "popularity")
)
let activities = try await feed.queryActivities(with: query)
client.queryActivities({
filter: {
text: {
$q: "popularity",
},
},
});
client.feeds.queryActivities({
filter: {
text: {
$q: "popularity",
},
},
});
Querying activities by search data
Consider this example activity:
{
"id": "activity-123",
"type": "post",
"text": "Check out our spring sale!",
"search_data": {
"campaign": {
"id": "spring-sale-2025",
"location": {
"mall": "yorkdale",
"city": "toronto",
"country": "canada"
}
}
}
// ... other activity fields
}
You can search this activity using the search_data
field in several ways:
// search for activities associated with the campaign ID 'spring-sale-2025'
let searchValue: [String: RawJSON] = ["campaign": .dictionary(["id": .string("spring-sale-2025")])]
let query = ActivitiesQuery(
filter: .contains(.searchData, searchValue)
)
let activities = try await feed.queryActivities(with: query)
// search for activities where the campaign took place in a mall
let query2 = ActivitiesQuery(
filter: .pathExists(.searchData, "campaign.location.mall")
)
let activities2 = try await feed.queryActivities(with: query2)
client.queryActivities({
filter: {
search_data: { $contains: { campaign: { id: "spring-sale-2025" } } },
},
});
client.queryActivities({
filter: {
search_data: { $path_exists: "campaign.location.mall" },
},
});
client.feeds.queryActivities({
filter: {
search_data: { $contains: { campaign: { id: "spring-sale-2025" } } },
},
});
client.feeds.queryActivities({
filter: {
search_data: { $path_exists: "campaign.location.mall" },
},
});
Activities Queryable Built-In Fields
name | type | description | supported operations | example |
---|---|---|---|---|
id | string or list of strings | The ID of the activity | $in , $eq | { id: { $in: [ 'abc', 'xyz' ] } } |
activity_type | string or list of strings | The type of the activity | $in , $eq | { activity_type: { $in: [ 'abc', 'xyz' ] } } |
user_id | string or list of strings | The ID of the user who created the activity | $in , $eq | { user_id: { $in: [ 'abc', 'xyz' ] } } |
text | string | The text content of the activity | $eq , $q , $autocomplete | { text: { $q: 'popularity' } } |
search_data | object | The extra metadata for search indexing | $contains , $path_exists | { search_data: { $contains: { 'category': 'sports', 'status': 'active' } } } |
interest_tags | list of strings | Tags for user interests | $eq , $contains | { interest_tags: { $in: [ 'sports', 'music' ] } } |
filter_tags | list of strings | Tags for filtering | $eq , $contains | { filter_tags: { $in: [ 'categoryA', 'categoryB' ] } } |
created_at | string, must be formatted as an RFC3339 timestamp | The time the activity was created | $eq , $gt , $lt , $gte , $lte | { created_at: { $gte: '2023-12-04T09:30:20.45Z' } } |
popularity | number | The popularity score of the activity | $eq , $ne , $gt , $lt , $gte , $lte | { popularity: { $gte: 70 } } |
near | object | Indicates the GEO point to search nearby activities | $eq | { near: { $eq: { lat: 40.0, lng: -74.0, distance: 200 } } } |
within_bounds | object | Indicates the GEO bounds to search for activities within | $eq | { within_bounds: { $eq: { ne_lat: 40.0, ne_lng: -115.0, sw_lat: 32.0, sw_lng: -125.0 } } } |
visible_to_user | boolean | Indicate whether the activity is visible to the user | $eq | { visible_to_user: { $eq: true } } |
Be sure to reach out to support if you need additional query activity capabilities.