<key>StartInterval</key>
<integer>3600</integer>
<key>StandardErrorPath</key>
<string>/path/to/project/stderr.log</string>
<key>StandardOutPath</key>
<string>/path/to/project/stdout.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string><![CDATA[/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin]]></string>
</dict>
<key>WorkingDirectory</key>
<string>/path/to/project</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>index.js</string>
</array>
</dict>
</plist>Final result
After just 3 days running this experiment, I got notified on a Monday morning at 6:00 AM of a re-stock, and I managed to complete the purchase. A couple hours later, the bike went out of stock again.