We are trying to be as transparent about the actual feed update time as possible. Most of other apps don't publish the actual feed update times.
From the app dashboard, you may find the actual feed update time fluctuate around the "usual" update times.
To understand the factors that affect the actual feed update time compared to the scheduled time, it's important to understand the steps of a feed run:
Feed runs typically compose of 4 steps, with the 1st step triggered from the schedule, and the last step once finished recorded as the real feed update time.
1/ Schedule system trigger the product export in Shopify at scheduled times
2/ An export job is carried out on Shopify servers' end
3/ A webhook from Shopify notify our servers that the export is done
4/ Our servers carry on with the feed building process, using the latest export.
Although our scheduling system are fairly consistent, the duration of the feed run process varies because some phases are out of our control. Step 2 and 3 are not entirely consistent time after time, so the scheduled feed runs won't finish at the same time day after day.
Feed runs are also designed to retry after failed attempts which could also leads to delayed feed update time. The longer step #4 takes, the more it's prone to real-time error (and get retried if error happens).
Step #4 will take longer if it involves:
Metafields that need to be translated (in a foreign language feed). Use "untranslated" metafields whenever you can.
Getting prices from external sources (Global-E)
Getting translations from external sources (GTranslate/Weglot)
There are also cases the latest update time looks like it was delayed, but in fact it was not. Feed runs are idempotent, and designed to run at-least-one per schedule. They can re-run after successful scheduled runs.
Only successful extra feed runs are charged.
It is important to understand that feed run is a process that depends on a lot of factors that fall outside of our control, so if you need the feed runs to complete consistently at specific time of day all the times, you need to look for another solution.
Don't expect the feed runs to complete consistently at specific time of day all the times.
Instead, one can count on the feeds get updated within a range of time for most of the times. For example, if the feed run averages to 1 hour, we could expect that 90% of the time it will finish within 45 minutes to 1.5 hour.
The feed actual update time should fall within range for more than 90% of the cases.