Instagram Hashtag Scraper

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.

The steps below take them in that order.

Step by step

  1. 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.
  2. 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.
  3. 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.
  4. 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 day in Only posts newer than. A slow niche suits weekly with 7 days. The run stops when the feed reaches that date, so a short window costs a short run.
  5. 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.
  6. 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:

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.

SetupWhat you seeFix
Window shorter than the intervalPosts published between the end of one window and the start of the next never appearMake the window at least as long as the interval
Window equal to the intervalUsually complete, but a delayed run leaves a small gapAdd an hour or two of overlap
Window longer than the intervalSome posts arrive twice and are charged twiceKeep 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.

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.

All articles