I’m in a pickle
is there a proper way to extract the user information If the user is an external user? I can get user information easily if it’s an internal staff member however any external comments are just appearing as the “owner”: null
been trying this URL
https://api.frame.io/v4/accounts/FRAMEACC/comments/COMMENTID
any suggestions?
hi @nevets348 unless a user has registered with Frame.io and is a part of the account, those are “anonymous users” and we do not retain their information outside of the browser session.
no worries that is what I’m thinking
for now I’m just trailing a system where I make notes of the clients user id and manually matching the commenter ID to a name.
@nevets348 if you have a suggestion on how you would like it to perform I can create a feature request ticket based on the info you’ve given
Hi Charlie,
I think at the end of the day, regardless if the client/viewer isn’t a part of the frame.io organisation that data should be able to be accessed/exposed to the API. As the system is already gathering that data to allow the user/viewer to create the comment in the first place.
Will just help with my automation so we can track “who" has commented on a creative. At the moment I’ve just got some JS codes in N8N doing some reasoning with “known user ID’s” and if that userID doesn’t match it’s just label as an “external commenter”
hope that makes sense 
Hey @nevets348 I’m in the exact same boat. The old API exposed the name of external commenters, but in the v4 API guest commenters come back as [null], so my N8N automations don’t get a commenters name.
@CharlieAnderson when will this existing API feature be implemented into the new v4 API? As @nevets348 said, you are already collecting their information.
In the meantime, I’ve got it working by essentially scrapping the public share link for the comment/timecode to extract the name. Not elegant but it works until we get a proper API implementation from FrameIO.
Full Overview: Guest Name Scraping
The Problem
When a guest reviewer comments on a Frame.io video, the API only returns “Guest Reviewer” as the name. The actual name is only visible on the public share/review page in the browser.
The Trigger
- Someone leaves a comment on a FrameIO video
- FrameIO fires a webhook to n8n
- n8n extracts: file_id, timecode, comment text, fps, project_id, user_name
The Decision
If Guest Reviewer checks if comment_user_name is “Guest Reviewer”. If it’s a real user, skip scraping entirely - we already have the name.
Finding the Right Share Link
- Get Project Shares - calls FrameIO API to get all share links for the project
- Prepare Share List - takes the shares array, reverses it (newest first), and attaches the comment details (file_id, timecode, text, fps) to each item
- Loop Over Items - feeds shares one at a time to the scraper
The Scraper (running on Docker)
For each share, n8n calls:
GET /scrape?share_id=X&file_id=Y&timecode=00:00:48:18&text=hello&fps=24
The scraper (Python + Flask + Playwright):
- Opens
https://next.frame.io/share/{share_id}/view/{file_id} in headless Chromium
- Waits for “Reply” text to appear (indicates comments loaded)
- Scrolls the comment container until no more comments load (checks Reply count stability)
- Grabs
document.body.innerText - the full page text
- Splits into lines, scans for a line matching the timecode
- Gathers comment text lines below the timecode until “Reply” or initials marker
- Normalises smart quotes and whitespace, compares against the search text
- If matched, the commenter name is 3 lines above the timecode
- Returns
{"found": true, "name": "Josh", ...} or {"found": false, ...}
The Loop Logic
- Scrape returns
found: true - routes to Set Resolved Name, loop stops
- Scrape returns
found: false (file not in that share, or no match) - If2 routes back to Loop, tries next share
- Scrape errors (page timeout, share disabled, etc.) - Continue On Fail keeps it going, If2 routes back to Loop
- All shares exhausted - Loop done output, falls through with “Guest Reviewer” as fallback
Why It Works
The scraper doesn’t need to know what files are in a share. It brute-forces the URL with the file_id. Frame.io resolves the file within the share regardless of folder nesting. If the file isn’t in that share, the page fails to load comments, scraper returns false, loop tries the next share. Newest shares are tried first since they’re most likely to contain the file.
Hi @jnorthest as I said previously, due to privacy policies centered around various scenarios, the user information is not retained in our system, which is why it returns null or External Commentator as we treat these as Anonymous users (even though they may have a name attached, unless they have registered/logged into Frame.io we throw away the data).
I have a ticket in to address this but know this is unlikely to change as it is a fundamental function due to some global privacy policies.
Hi @CharlieAnderson,
When a guest reviewer leaves a comment via a share link, they’re prompted to enter their name and email, and by clicking “Save” they agree to Adobe’s Terms of Use and Privacy Policy. So the data is being collected and stored - it’s visible on the review page itself, which is how I’ve been able to retrieve it via scraping as a workaround.
Adobe’s own Privacy Policy supports this:
- Under “Adobe Services and Software,” the policy covers information users provide when they “access and use” Adobe’s Services and Software, including “content that includes personal information which is sent or received using an online feature” or “stored on Adobe servers.”
- The policy specifically mentions that Adobe’s Services and Software “allow you to post comments” and that such information can be seen by other users of the service.
- Under data storage, it states: “Your personal information and files are stored on Adobe’s servers.”
- Under retention, it confirms Adobe keeps personal information “for as long as you are an active user.”
So the data is being collected, stored, and displayed with the guest’s consent. It’s just not currently accessible via the V4 API.
It would be great if this could be surfaced through the API properly. It’s a common need for automation workflows - being able to attribute comments to the person who actually left them. And since this feature was availble in the previous API I don’t see why it can’t be added in v4.
Happy to help put together a feature request if that would be useful.
2 Likes