How to monitor an Instagram hashtag and get alerted to new posts
Published
To monitor an Instagram hashtag without opening the app every day, schedule a run that collects the tag's newest posts on a fixed interval, then let the platform tell you when each run finishes or fails. Instagram itself offers no alert for a hashtag you do not own. Following a tag only adds it to your feed, mixed in with everything else. What you want is the opposite: nothing until something new appears under the tag, and a loud message if the watcher stops working.
This guide builds that with Instagram Hashtag Scraper, an Apify actor, plus the schedules, webhooks and Slack or Zapier integrations Apify provides. It also covers the part most guides skip: the alert for the watcher itself. A silent tag and a dead watcher look identical unless you arrange for them not to.
What an alert needs to do
Three things have to be true before you trust a monitor.
- New posts reach you. Each interval, the posts that appeared since the last one land somewhere you read: a Slack channel, a sheet, an email.
- Nothing is missed between runs. If the window is shorter than the interval, a gap opens and posts fall into it.
- A broken watcher is distinguishable from a quiet tag. If the session expires and the run fails, you hear about the failure. Otherwise a month of silence looks like a month of nothing happening.
The steps below take them in that order.
Step by step
- Get a session cookie. Instagram serves hashtag data only to a signed-in session. Use a separate account you are willing to lose, never your personal one. Getting started shows where the two cookie values live.
- Check the tag is worth watching. The free hashtag checker reads the live recent tab without starting a run. A tag that gets one post a month needs a weekly check, not an hourly one.
- Run the actor once by hand. Enter the hashtag, a maximum number of posts and a value in Only posts newer than. Look at the rows. Each one carries the post link, the author, the caption, the time it was posted and the counts Instagram reports.
- Pick the interval and match the window to it. A brand tag you want to hear about the same day suits a daily run with
1 dayin Only posts newer than. A slow niche suits weekly with7 days. The run stops when the feed reaches that date, so a short window costs a short run. - Save it as a schedule. In the Apify console, create a schedule and give it the actor with your input. Apify's documentation says schedules use cron expressions, support time zones and daylight saving, and that new schedules are created disabled by default, so switch it on after saving. As of October 2026 a schedule can also carry an input override as a JSON object.
- Attach the alerts. The next two sections.
Alert one: new posts, in Slack or through Zapier
Apify's Slack integration lives on the Integrations tab of an actor or a task. Its documentation lists the events you can choose to be notified about, "run created, run succeeded, run failed, and so on", and says you can write a custom message. Pick run succeeded and a channel, and every finished run posts there.
That is where the catch sits. A succeeded run is not the same as a run that found something. A quiet interval also ends in success, so a plain run-succeeded message arrives whether or not there is anything new. The actor's status message does state the count, in the form "N posts delivered, M charged", but you want the alert itself to depend on it.
There are two ways to make it depend on the count:
- Zapier. Apify's Zapier integration can trigger a workflow whenever an actor or task finishes, and its actions include fetching items from a dataset. Trigger on the finished run, fetch the items, and add a filter step that continues only when the list is not empty. From there the zap can post to Slack, add rows to Google Sheets or send an email.
- A webhook of your own. Apify's webhook documentation says the only available action is a POST request to a URL you provide. The event carries the run id, and the documentation gives the address for a run's items:
https://api.apify.com/v2/actor-runs/[ACTOR_RUN_ID]/dataset/items?token=[TOKEN]. Your endpoint fetches that, checks whether it holds anything and forwards a message if it does.
The Zapier route needs no code. The webhook route is the cheaper one if you already run something that receives POST requests.
Alert two: the watcher broke
This is the half that makes a monitor trustworthy. The actor fails loudly. When it cannot read the feed, for example because the Instagram session expired, the run ends with a failed status rather than a green tick with zero rows. Apify's event list includes ACTOR.RUN.FAILED, "An Actor run finished with status FAILED", and the Slack integration offers run failed as a choice.
So add a second notification, scoped to failures only, going to a channel someone reads. The failure message tells you the session needs a fresh cookie. Without it, the same expiry produces a monitor that has been silent since the day the session died, and the silence looks like a calm hashtag.
This is the practical difference between watching a tag through a feed and watching it through runs. The RSS feed route is simple, but its feed only stops growing when the session dies. Failure alerts turn that into a message.
Keeping the window honest
A schedule and a date window have to agree, or the monitor drifts.
| Setup | What you see | Fix |
|---|---|---|
| Window shorter than the interval | Posts published between the end of one window and the start of the next never appear | Make the window at least as long as the interval |
| Window equal to the interval | Usually complete, but a delayed run leaves a small gap | Add an hour or two of overlap |
| Window longer than the interval | Some posts arrive twice and are charged twice | Keep the overlap small, and ignore repeats downstream |
Apify's documentation notes that scheduled runs usually start within a second of their time but "can be delayed because of a system overload or a server shutting down". That is the reason for a little overlap. Every row carries a post code, so the sheet or workflow that receives the rows can skip a code it has already stored.
What it costs
You pay $0.0005 per delivered post and nothing else is charged by the actor: no fee per run and no fee per hashtag. A tag that gets forty posts a day costs about two cents a day to watch, and an interval that finds nothing delivers nothing and charges nothing. The Apify platform and its plans are a separate layer. What an Instagram hashtag job costs on Apify walks through it.
When the manual way is enough
You do not need any of this in several cases.
- You watch one tag for a week. Open the tag in the app and look. Setting up a schedule costs more than it saves.
- You check once a month. A saved search and a calendar reminder do the job.
- You want sentiment, share of voice or charts and not rows of posts. A monitoring suite such as Brand24 or Awario does that analysis for you. Instagram hashtag tracker options compares the two kinds of product.
This tool also does one hashtag per run and nothing else: no profiles, no followers, no other networks. Watching ten tags means ten schedules. If the session belongs to an account you cannot risk, it is not the right tool either.
Using what arrives
An alert is only the front door. Once posts are landing each day, two guides turn them into something useful: how to track hashtag performance week by week for a campaign tag, and Instagram social listening without a suite for a brand or category.
The short version
Schedule one run per tag with a window that matches the interval. Send run succeeded through a filter that checks for rows, so the message means "something new". Send run failed to a channel someone reads, so a dead session announces itself. Everything described here uses Apify's own documented schedules, webhooks and integrations as of October 2026, and the checks on the actor side are the ones above: an exact result limit, a real date window and a failed status when the feed cannot be read.