How to collect user generated content on Instagram
Published
The reliable way to collect user generated content on Instagram is to give customers one branded hashtag, read everything posted to it on a regular schedule, and keep each post as a row with its link, its author and its date. Mentions and tags in your notifications catch some of it. A hashtag you read yourself catches the rest, and it gives you a record you can sort, share with a team and come back to. This guide covers the whole job: choosing the tag, collecting the posts by hand, collecting them as a dataset when there are too many to scroll, and getting permission before anything is reposted.
What counts as user generated content on Instagram
User generated content (UGC) is anything a customer, fan or member of the public posts about your brand without you making it. On Instagram that means photos, carousels and Reels, and it reaches you in three ways:
- Tags and mentions. Someone tags your account in the photo or writes
@yourbrandin the caption. These show up in your notifications and in the Tagged tab of your profile. - A branded hashtag. Someone adds your campaign tag, such as
#yourbrandathome, to the caption. Nothing notifies you. The post only appears on the hashtag's page. - Untagged posts. The product is in the photo but nobody told you. These are the hardest to find, and no method catches all of them.
Most brands already watch the first route. The second route is where a campaign lives, because a hashtag is what you print on packaging, put in a contest brief or ask an event crowd to use. It is also the route that quietly loses posts if nobody reads it.
Step 1: choose a hashtag you can actually read
A branded hashtag only works as a collection bin if the posts in it are yours. Before you print it anywhere:
- Search it on Instagram first. If it already has posts from unrelated accounts, pick another. You will be sorting strangers' holiday photos out of your campaign for as long as it runs.
- Keep it short and unambiguous. One spelling, no numbers people might swap for letters.
- Use one tag per campaign. A contest tag separate from the evergreen brand tag makes each one's entries easy to count and easy to close.
If you want to see how busy a candidate tag already is, the free hashtag checker reads its recent posts and reports its pace and the tags that usually appear with it.
Step 2: the manual way, in the app
For a small campaign, the app is enough:
- Open the hashtag's page and switch to the most recent posts.
- For each post you might use, copy its link and the author's username into a sheet, with the date.
- Mark the ones you would like to reuse, then move on to permission (Step 5).
Always record the link and the username at the moment you find a post. A screenshot without them is a picture you cannot credit and cannot ask permission for.
When the manual way is enough
Stay with the app when:
- the tag gets a handful of posts a week;
- you only need a few favourites for a story or a highlight;
- one person handles the campaign and nobody else needs the record.
It stops working when the tag is busy, when a contest needs every entry counted rather than a sample, or when you want to read it again next week and see only what is new.
Step 3: collect the posts as a dataset
The repeatable version is the same job with the scrolling replaced by a download: every post on the tag, one row each, in a spreadsheet you can filter.
This is what the Instagram Hashtag Scraper does. You give it one hashtag and a date window and it writes that tag's recent posts to a dataset, newest first. The fields that matter for UGC:
| Field | Why it matters for UGC |
|---|---|
ownerUsername | Who to credit and who to ask for permission |
url | The post itself, for review and for the permission request |
takenAt | When it was posted, in UTC, so you can check contest deadlines |
caption | What the creator said, including whether they used your tag as intended |
hashtags | Every tag in the caption, useful for spotting spam and contest rules |
mediaType | Image, carousel or video, since a Reel and a photo get used differently |
likeCount, commentCount | How the post did, read at the moment of the run |
displayUrl | A preview image link, so a reviewer can scan the sheet without opening every post |
A typical run for a campaign tag:
- Set Hashtag to your campaign tag, without the
#. - Set Only posts newer than to the start of the campaign, or to
7 daysfor a weekly sweep. The run stops when the feed reaches that date, so older posts are never read or charged. - Set Maximum posts to a ceiling you are comfortable with. The limit is exact.
- Paste the session cookie of an Instagram account you control. Instagram serves hashtag posts only to signed-in requests, so any method that reads a tag needs one. The step-by-step scraping guide shows where to find it.
- Run it and export the dataset as CSV or Excel. The Excel export guide covers getting it into a sheet cleanly.
The scraper charges $0.0005 per post delivered to your dataset, so a campaign tag that collected 400 posts costs $0.20 to read in full, and a weekly run that finds nothing new costs nothing.
Step 4: sort the collection into a shortlist
With the posts in a sheet, reviewing them is quicker than scrolling. Add three columns of your own:
- Status: new, shortlisted, asked, approved, declined.
- Use: where you would like to put it (feed, ad, product page, email).
- Notes: anything the reviewer should know, such as a competitor product in the shot.
Then work through it:
- Filter out your own posts and your team's accounts by
ownerUsername. - Drop the spam. Posts carrying thirty unrelated tags in
hashtagsare rarely genuine entries. - Sort by
takenAtfor a contest, so you can see who posted before the deadline. - Sort by engagement when you are looking for the posts people already responded to. Leave a row blank when a count is empty, since Instagram hides counts on some posts and a hidden count is unknown rather than zero.
For an ongoing brand tag, run the same read every week with a seven-day window and paste each week's rows under the last. Keep the windows from overlapping, because deduplication happens within one run, and two overlapping runs would collect the same posts twice.
Step 5: ask for permission before you reuse anything
Collecting a post and reusing it are different things. A post on your hashtag is still the creator's work, and using a hashtag is not permission to put their photo in your ad. Before any reuse:
- Ask in a comment or a direct message, from the brand account, naming exactly where you would like to use it. Something like: "We love this! Could we share it on our page and website, with credit to you? Reply #yes to agree."
- Record the answer in your sheet, with the date and a link or screenshot of the reply.
- Credit the creator by username wherever the post appears.
- For paid ads, get it in writing. A comment reply is a reasonable record for a repost. An ad usually deserves a proper release, and your platform's ad rules or a lawyer can tell you what yours needs.
The ownerUsername and url columns are what make this step fast: every row already names who to ask and what you are asking about.
The approaches, side by side
| Approach | Catches | Keeps a record | Scales to a busy tag |
|---|---|---|---|
| Notifications and Tagged tab | Tags and mentions only | No | Yes, for that route |
| Hashtag page, by hand | Branded hashtag posts | Only what you copy | No |
| Free hashtag checker | A tag's pace and companion tags | The summary only | Yes |
| Hashtag Scraper | Every recent post on the tag, as rows | Yes, as a dataset | Yes |
Most brands end up using two of these together: notifications for mentions, and a scheduled hashtag read for the campaign tag.
What a hashtag read cannot collect
Plan around the limits so nothing surprises you mid-campaign:
- Untagged posts. If a customer did not use the tag, a hashtag read cannot see the post.
- Private accounts. Posts from private profiles do not appear on public hashtag pages.
- Stories. They are not on hashtag feeds in a form that can be collected, and they disappear after a day anyway.
- One hashtag per run. Two campaign tags means two runs, merged in the sheet.
- Counts are a snapshot. Likes and comments are read when the run happens, and keep changing afterwards.
The limits page lists every one, and the output page shows a full sample row. If you want to go further than a campaign and track how a tag moves over months, the hashtag tracker guide compares the options for that.
The short version
Collecting user generated content on Instagram comes down to four moves: give customers one clean branded hashtag, read it on a schedule, keep every post as a row with its author and link, and ask before you reuse. The app handles a quiet tag. When the tag gets busy or a contest needs every entry counted, run the scraper on the campaign window and review the whole collection in one sheet.