When to Use
- Bulk comment moderation: After publishing a high-visibility post, retrieve all comments for batch sentiment scoring, flagging policy violations, and routing to the appropriate moderation action nodes.
- Community management dashboard: Pull all comments on recent posts to populate a community manager's inbox, sorted by timestamp, with unanswered questions highlighted.
- Contest or giveaway entry collection: For promotions that ask followers to comment to enter, retrieve all comments from the giveaway post and process entries for winner selection.
- Post engagement reporting: Collect comment text from campaign posts for quantitative and qualitative reporting — word frequency, sentiment distribution, question extraction.
- Keyword-triggered response: Periodically scan new comments for specific keywords (discount codes, support requests, competitor mentions) to trigger automated workflows.
Configuration
Connection
| Field | Required | Description |
accessToken | Required | Long-lived Instagram access token stored in BizFirst Credentials Manager. |
igUserId | Required | Your Instagram Business/Creator account ID. |
Operation
| Field | Required | Description |
resource | Required | Must be comments. |
operation | Required | Must be list. |
mediaId | Required | The Instagram media object ID whose comments to list. |
limit | Optional | Number of comments per page. Default 25. Clamped to 1–100. |
after | Optional | Cursor from previous page's paging.after for forward pagination. |
Sample Configuration JSON
{
"resource": "comments",
"operation": "list",
"accessToken": "{{ $credential.instagram.accessToken }}",
"igUserId": "17841400000000000",
"mediaId": "17855590000000001",
"limit": 50
}
Validation Errors
| Error | Cause |
accessToken is required | accessToken field is missing or empty. |
mediaId is required | mediaId field is missing or empty. |
| Graph API error 100 | Media ID does not exist or is not owned by this account. |
Output
Success Port
| Field | Type | Description |
status | string | "success" |
comments | array | Array of comment objects. Each contains id, text, username, timestamp and other requested fields. |
paging.before | string | Cursor for the previous page. |
paging.after | string | Cursor for the next page. Empty when on last page. |
paging.nextUrl | string | Full Graph API URL for the next page. |
paging.previousUrl | string | Full Graph API URL for the previous page. |
payload | string | Raw JSON response. |
Error Port
| Field | Type | Description |
status | string | "error" |
errorCode | string | Graph API error code. |
errorMessage | string | Error description. |
payload | string | Raw error response. |
Sample Output JSON
{
"status": "success",
"comments": [
{
"id": "17858893269000001",
"text": "Love this! Where can I buy?",
"username": "customer_jane",
"timestamp": "2025-06-15T16:42:00+0000"
},
{
"id": "17858893269000002",
"text": "Great quality as always",
"username": "loyal_follower",
"timestamp": "2025-06-15T17:05:00+0000"
}
],
"paging": {
"before": "QVFIUm...",
"after": "QVFIUm2...",
"nextUrl": "https://graph.facebook.com/v18.0/...",
"previousUrl": ""
}
}
Expression Reference
| Expression | Value |
{{ $output.instagram.comments }} | Full comments array |
{{ $output.instagram.comments[0].id }} | First comment's ID |
{{ $output.instagram.comments[0].text }} | First comment's text |
{{ $output.instagram.comments[0].username }} | First commenter's username |
{{ $output.instagram.paging.after }} | Next-page cursor |
Node Policies & GuardRails
- Rate limit: 200 calls per user per hour. High-engagement posts may have hundreds of comments across many pages. Use large limit values (100) and implement pagination loops efficiently.
- GDPR: Comment text and usernames are personal data. Obtain lawful basis for processing and implement data retention policies when storing comment data.
- Hidden comments: The API returns all comments including hidden ones. Filter by the
hidden field if you only want to process visible comments.
- Deleted comments: Comments deleted by the author or by you after retrieval will not update in cached responses. Re-fetch for current state.
Examples
Giveaway entry collection
{
"resource": "comments",
"operation": "list",
"accessToken": "{{ $credential.instagram.accessToken }}",
"igUserId": "{{ $env.IG_USER_ID }}",
"mediaId": "{{ $input.giveawayPostId }}",
"limit": 100
}
Retrieves up to 100 comments per page. The next node loops through comments array entries to extract username values for the prize draw, paginating via paging.after until the cursor is empty.
Keyword moderation scan
{
"resource": "comments",
"operation": "list",
"accessToken": "{{ $credential.instagram.accessToken }}",
"igUserId": "17841400000000000",
"mediaId": "{{ $trigger.body.value.mediaId }}",
"limit": 50
}
Triggered when a post receives a new comment via webhook. Retrieves recent comments and pipes them through a keyword filter node that routes policy-violating comments to comment/hide.