Discord


Table of Contents


Quick Setup

Requirements: Node.js >= 24 and Git
Works on Windows, Linux, macOS, and WSL.

Get the script

git clone https://github.com/TheNetsky/Microsoft-Rewards-Script.git
cd Microsoft-Rewards-Script

Or, download the latest release ZIP and extract it.

Create an account.json and config.json

Copy, rename, and edit your account and configuration files before deploying the script.

  • Copy or rename src/accounts.example.json to src/accounts.json and add your credentials
  • Copy or rename src/config.example.json to src/config.json and customize your preferences.

Caution

Do not skip this step. Prior versions of accounts.json and config.json are not compatible with current release.

Warning

You must rebuild your script after making any changes to accounts.json and config.json.

Build and run the script (bare metal version)

npm run pre-build
npm run build
npm run start

Build and run the script (docker version)

docker compose up -d

Caution

Set headless to true in the config.json when using docker. Additional docker-specific scheduling options are in the compose.yaml

Note

When headless, monitor logs with docker logs microsoft-rewards-script (for example, to view 2FA codes), or enable a webhook service


Nix Setup

If using Nix:

  1. Run the pre-build step first:

    npm run pre-build
    
  2. Then start the script:

    ./run.sh
    

This will launch the script headlessly using xvfb-run.


Configuration Reference

Note

Edit src/config.json to customize behavior. Below are all currently available options. Rebuild the script after all changes.

Core

Setting Type Default Description
baseURL string "https://rewards.bing.com" Microsoft Rewards base URL
sessionPath string "sessions" Directory to store browser sessions
headless boolean false Run browser invisibly
runOnZeroPoints boolean false Run even when no points are available
clusters number 1 Number of concurrent account clusters
errorDiagnostics boolean false Enable error diagnostics
searchOnBingLocalQueries boolean false Use local query list
globalTimeout string "30sec" Timeout for all actions

Caution

Set headless to true when using docker

Workers

Setting Type Default Description
workers.doDailySet boolean true Complete daily set
workers.doSpecialPromotions boolean true Complete special promotions
workers.doMorePromotions boolean true Complete more promotions
workers.doPunchCards boolean true Complete punchcards
workers.doAppPromotions boolean true Complete app promotions
workers.doDesktopSearch boolean true Perform desktop searches
workers.doMobileSearch boolean true Perform mobile searches
workers.doDailyCheckIn boolean true Complete daily check-in
workers.doReadToEarn boolean true Complete Read-to-Earn

Search Settings

Setting Type Default Description
searchSettings.scrollRandomResults boolean false Scroll randomly on results
searchSettings.clickRandomResults boolean false Click random links
searchSettings.parallelSearching boolean true Run searches in parallel
searchSettings.queryEngines string[] ["google", "wikipedia", "reddit", "local"] Query engines to use
searchSettings.searchResultVisitTime string "10sec" Time to spend on each search result
searchSettings.searchDelay.min string "30sec" Minimum delay between searches
searchSettings.searchDelay.max string "1min" Maximum delay between searches
searchSettings.readDelay.min string "30sec" Minimum delay for reading
searchSettings.readDelay.max string "1min" Maximum delay for reading

Logging

Setting Type Default Description
debugLogs boolean false Enable debug logging
consoleLogFilter.enabled boolean false Enable console log filtering
consoleLogFilter.mode string "whitelist" Filter mode (whitelist/blacklist)
consoleLogFilter.levels string[] ["error", "warn"] Log levels to filter
consoleLogFilter.keywords string[] ["starting account"] Keywords to filter
consoleLogFilter.regexPatterns string[] [] Regex patterns for filtering

Proxy

Setting Type Default Description
proxy.queryEngine boolean true Proxy query engine requests

Webhooks

Setting Type Default Description
webhook.discord.enabled boolean false Enable Discord webhook
webhook.discord.url string "" Discord webhook URL
webhook.ntfy.enabled boolean false Enable ntfy notifications
webhook.ntfy.url string "" ntfy server URL
webhook.ntfy.topic string "" ntfy topic
webhook.ntfy.token string "" ntfy authentication token
webhook.ntfy.title string "Microsoft-Rewards-Script" Notification title
webhook.ntfy.tags string[] ["bot", "notify"] Notification tags
webhook.ntfy.priority number 3 Notification priority (1-5)
webhook.webhookLogFilter.enabled boolean false Enable webhook log filtering
webhook.webhookLogFilter.mode string "whitelist" Filter mode (whitelist/blacklist)
webhook.webhookLogFilter.levels string[] ["error"] Log levels to send
webhook.webhookLogFilter.keywords string[] ["starting account", "select number", "collected"] Keywords to filter
webhook.webhookLogFilter.regexPatterns string[] [] Regex patterns for filtering

Warning

NTFY users set the webhookLogFilter to enabled, or you will receive push notifications for all logs. When enabled, only account start, 2FA codes, and account completion summaries are delivered as push notifcations. Customize which notifications you receive with the keywords options.


Account Configuration

Warning

Edit src/accounts.json. The file is a flat array of accounts, not { "accounts": [ ... ] }. Rebuild the script after all changes.

[
    {
        "email": "email_1",
        "password": "password_1",
        "totpSecret": "",
        "recoveryEmail": "",
        "geoLocale": "auto",
        "langCode": "en",
        "proxy": {
            "proxyAxios": false,
            "url": "",
            "port": 0,
            "username": "",
            "password": ""
        },
        "saveFingerprint": {
            "mobile": false,
            "desktop": false
        }
    },
    {
        "email": "email_2",
        "password": "password_2",
        "totpSecret": "",
        "recoveryEmail": "",
        "geoLocale": "auto",
        "langCode": "en",
        "proxy": {
            "proxyAxios": false,
            "url": "",
            "port": 0,
            "username": "",
            "password": ""
        },
        "saveFingerprint": {
            "mobile": false,
            "desktop": false
        }
    }
]

Note

geoLocale uses the default locale of your Microsoft profile. You can overwrite it here with a custom locale.

Tip

When using 2FA login, adding your totpSecret will enable the script to automatically generate and enter the timed 6 digit code to login. To get your totpSecret in your Microsoft Security settings, click 'Manage how you sign in'. Add Authenticator app, when shown the QR code, select 'enter code manually'. Use this code in the accounts.json.


Troubleshooting

Note

Most login issues can be fixed by deleting your /sessions folder, and redeploying the script


Disclaimer

Use at your own risk.
Automation of Microsoft Rewards may lead to account suspension or bans.
This software is provided for educational purposes only.
The authors are not responsible for any actions taken by Microsoft.

Description
Automated Microsoft Rewards script, using TypeScript, Cheerio and Playwright.
Readme GPL-3.0 3.7 MiB
Languages
TypeScript 94%
Shell 4%
Dockerfile 1.5%
Nix 0.5%