# External User Comment Information

**URL:** <https://forum.frame.io/t/external-user-comment-information/3129>\
**Category:** Help\
**Tags:** v4\
**Created:** [January 19, 2026, 6:57am UTC](https://forum.frame.io/t/external-user-comment-information/3129 "2026-01-19T06:57:33Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![nevets348](https://avatars.discourse-cdn.com/v4/letter/n/47e85d/32.png) [@nevets348](https://forum.frame.io/u/nevets348)\
**Post date:** [January 19, 2026, 6:57am UTC](https://forum.frame.io/t/external-user-comment-information/3129/1 "2026-01-19T06:57:33Z")

</div>

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](https://api.frame.io/v4/accounts/FRAMEACC/comments/COMMENTID)

any suggestions?

---

<div class="post-metadata">

**Author:** ![CharlieAnderson](https://yyz1.discourse-cdn.com/flex035/user_avatar/forum.frame.io/charlieanderson/32/491_2.png) [@CharlieAnderson](https://forum.frame.io/u/CharlieAnderson)\
**Post date:** [January 20, 2026, 11:25pm UTC](https://forum.frame.io/t/external-user-comment-information/3129/2 "2026-01-20T23:25:52Z")

</div>

hi @nevets348 unless a user has registered with [Frame.io](http://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.

---

<div class="post-metadata">

**Author:** ![nevets348](https://avatars.discourse-cdn.com/v4/letter/n/47e85d/32.png) [@nevets348](https://forum.frame.io/u/nevets348)\
**Post date:** [January 21, 2026, 1:45am UTC](https://forum.frame.io/t/external-user-comment-information/3129/3 "2026-01-21T01:45:25Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![CharlieAnderson](https://yyz1.discourse-cdn.com/flex035/user_avatar/forum.frame.io/charlieanderson/32/491_2.png) [@CharlieAnderson](https://forum.frame.io/u/CharlieAnderson)\
**Post date:** [January 21, 2026, 2:32pm UTC](https://forum.frame.io/t/external-user-comment-information/3129/4 "2026-01-21T14:32:22Z")

</div>

@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

---

<div class="post-metadata">

**Author:** ![nevets348](https://avatars.discourse-cdn.com/v4/letter/n/47e85d/32.png) [@nevets348](https://forum.frame.io/u/nevets348)\
**Post date:** [February 5, 2026, 6:40am UTC](https://forum.frame.io/t/external-user-comment-information/3129/5 "2026-02-05T06:40:09Z")

</div>

Hi Charlie,

I think at the end of the day, regardless if the client/viewer isn’t a part of the [frame.io](http://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 🙂

---

<div class="post-metadata">

**Author:** ![jnorthest](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@jnorthest](https://forum.frame.io/u/jnorthest)\
**Post date:** [March 1, 2026, 8:25am UTC](https://forum.frame.io/t/external-user-comment-information/3129/6 "2026-03-01T08:25:24Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![jnorthest](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@jnorthest](https://forum.frame.io/u/jnorthest)\
**Post date:** [March 2, 2026, 7:39am UTC](https://forum.frame.io/t/external-user-comment-information/3129/7 "2026-03-02T07:39:27Z")

</div>

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.

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/frame1/original/1X/d09621c4a94abc21a79574d1edf9550c2dec8c40.png)

## Full Overview: Guest Name Scraping

### The Problem

When a guest reviewer comments on a [Frame.io](http://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

1. Someone leaves a comment on a FrameIO video
2. FrameIO fires a webhook to n8n
3. 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

1. **Get Project Shares** - calls FrameIO API to get all share links for the project
2. **Prepare Share List** - takes the shares array, reverses it (newest first), and attaches the comment details (file\_id, timecode, text, fps) to each item
3. **Loop Over Items** - feeds shares one at a time to the scraper

### The Scraper (running on Docker)

For each share, n8n calls:

```auto
GET /scrape?share_id=X&file_id=Y&timecode=00:00:48:18&text=hello&fps=24

```

The scraper (Python + Flask + Playwright):

1. Opens `https://next.frame.io/share/{share_id}/view/{file_id}` in headless Chromium
2. Waits for “Reply” text to appear (indicates comments loaded)
3. Scrolls the comment container until no more comments load (checks Reply count stability)
4. Grabs `document.body.innerText` - the full page text
5. Splits into lines, scans for a line matching the timecode
6. Gathers comment text lines below the timecode until “Reply” or initials marker
7. Normalises smart quotes and whitespace, compares against the search text
8. If matched, the commenter name is 3 lines above the timecode
9. 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](http://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.

---

<div class="post-metadata">

**Author:** ![CharlieAnderson](https://yyz1.discourse-cdn.com/flex035/user_avatar/forum.frame.io/charlieanderson/32/491_2.png) [@CharlieAnderson](https://forum.frame.io/u/CharlieAnderson)\
**Post date:** [March 2, 2026, 3:30pm UTC](https://forum.frame.io/t/external-user-comment-information/3129/8 "2026-03-02T15:30:04Z")

</div>

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](http://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.

---

<div class="post-metadata">

**Author:** ![jnorthest](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@jnorthest](https://forum.frame.io/u/jnorthest)\
**Post date:** [March 2, 2026, 10:43pm UTC](https://forum.frame.io/t/external-user-comment-information/3129/9 "2026-03-02T22:43:32Z")

</div>

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](https://www.adobe.com/au/legal/terms.html) and [Privacy Policy](https://www.adobe.com/au/privacy/policy.html). 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.

---

<div class="post-metadata">

**Author:** ![jsoffer](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jsoffer](https://forum.frame.io/u/jsoffer)\
**Post date:** [September 7, 2026, 5:00am UTC](https://forum.frame.io/t/external-user-comment-information/3129/10 "2026-09-07T05:00:32Z")

</div>

Hey @CharlieAnderson – Was there any movement here? You mentioned that that data is thrown away but I’m still able to see “anonymous” (non-registered) user’s names in the Web UI and it’s inside the GraphQL API. So I believe that “data” is being retained. Also that data is attached to the .csv that’s downloadable via the web UI.

I’m trying to make a way to archive comments and it’s really confusing without people’s names.

---

<div class="post-metadata">

**Author:** ![thefork](https://avatars.discourse-cdn.com/v4/letter/t/d78d45/32.png) [@thefork](https://forum.frame.io/u/thefork)\
**Post date:** [September 23, 2026, 5:03am UTC](https://forum.frame.io/t/external-user-comment-information/3129/11 "2026-09-23T05:03:05Z")

</div>

@CharlieAnderson Any updates here?

The info is being retained and available in the app but not available in the api.
