Caution
V3.x does not support the new Bing Rewards interface!
Use at your own risk — some features may not work as expected.
Requirements: Node.js >= 24 and Git
Works on Windows, Linux, macOS, and WSL.
git clone https://github.com/TheNetsky/Microsoft-Rewards-Script.git
cd Microsoft-Rewards-ScriptOr, download the latest release ZIP and extract it.
Copy, rename, and edit your account and configuration files before deploying the script.
- Copy or rename
src/accounts.example.jsontosrc/accounts.jsonand add your credentials - Copy or rename
src/config.example.jsontosrc/config.jsonand 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.
npm run pre-build
npm run build
npm run start- Copy the sample
compose.yaml - Copy and rename
env.exampleto.envand add your account credentials:
ACCOUNT_1_EMAIL=you@example.com
ACCOUNT_1_PASSWORD=your_passwordNote
A valid accounts.json is automatically created based on these values, and saved locally to ./config/
- Review
compose.yamlto adjust scheduling, timezone, and config options.
Note
A valid config.json is auto-generated on first run using default values, and saved locally to ./config/.
Optionally, use CONFIG_* variables in the environment: section of the compose.yaml to customise your options (e.g., clusters, webhook).
Commonly changed values are included in the sample compose.yaml, and a full list of configuration options are in the table below.
Custom config values set in the compose.yaml are applied on every startup and always take precedence over ./config/config.json.
Tip
If a new image adds config options you're missing, a warning will appear in the container logs.
To update, delete ./config/config.json and restart, a fresh one will be generated from the latest example, with your compose.yaml overrides re-applied.
- Start the container:
docker compose up -d
Tip
Monitor logs with docker logs microsoft-rewards-script, useful for viewing passwordless login codes or diagnosing issues.
You can also enable a webhook in compose.yaml for notifications.
If using Nix: bash scripts/nix/run.sh
Edit config.json to customize behavior, or set CONFIG_* environment variables in compose.yaml (Docker). Below are all currently available options.
Warning
Rebuild the script (bare metal), or recreate the container (Docker) after all config changes.
| Setting | Type | Default | Description | Docker environment variable |
|---|---|---|---|---|
baseURL |
string | "https://rewards.bing.com" |
Microsoft Rewards base URL | |
sessionPath |
string | "sessions" |
Directory to store browser sessions | |
headless |
boolean | false |
Run browser invisibly | Always true in Docker |
clusters |
number | 1 |
Number of concurrent account clusters | CONFIG_CLUSTERS |
errorDiagnostics |
boolean | false |
Enable error diagnostics | CONFIG_ERROR_DIAGNOSTICS |
searchOnBingLocalQueries |
boolean | false |
Use local query list | CONFIG_SEARCH_ON_BING_LOCAL |
globalTimeout |
string | "30sec" |
Timeout for all actions | CONFIG_GLOBAL_TIMEOUT |
| Setting | Type | Default | Description | Docker environment variable |
|---|---|---|---|---|
workers.doDailySet |
boolean | true |
Complete daily set | CONFIG_WORKER_DAILY_SET |
workers.doSpecialPromotions |
boolean | true |
Complete special promotions | CONFIG_WORKER_SPECIAL_PROMOTIONS |
workers.doMorePromotions |
boolean | true |
Complete more promotions | CONFIG_WORKER_MORE_PROMOTIONS |
workers.doPunchCards |
boolean | true |
Complete punchcards | CONFIG_WORKER_PUNCH_CARDS |
workers.doAppPromotions |
boolean | true |
Complete app promotions | CONFIG_WORKER_APP_PROMOTIONS |
workers.doDesktopSearch |
boolean | true |
Perform desktop searches | CONFIG_WORKER_DESKTOP_SEARCH |
workers.doMobileSearch |
boolean | true |
Perform mobile searches | CONFIG_WORKER_MOBILE_SEARCH |
workers.doDailyCheckIn |
boolean | true |
Complete daily check-in | CONFIG_WORKER_DAILY_CHECKIN |
workers.doReadToEarn |
boolean | true |
Complete Read-to-Earn | CONFIG_WORKER_READ_TO_EARN |
| Setting | Type | Default | Description | Docker environment variable |
|---|---|---|---|---|
searchSettings.scrollRandomResults |
boolean | false |
Scroll randomly on results | CONFIG_SEARCH_SCROLL_RANDOM |
searchSettings.clickRandomResults |
boolean | false |
Click random links | CONFIG_SEARCH_CLICK_RANDOM |
searchSettings.parallelSearching |
boolean | true |
Run searches in parallel | CONFIG_SEARCH_PARALLEL |
searchSettings.queryEngines |
string[] | ["google", "wikipedia", "reddit", "local"] |
Query engines to use | |
searchSettings.searchResultVisitTime |
string | "10sec" |
Time to spend on each search result | CONFIG_SEARCH_VISIT_TIME |
searchSettings.searchDelay.min |
string | "30sec" |
Minimum delay between searches | CONFIG_SEARCH_DELAY_MIN |
searchSettings.searchDelay.max |
string | "1min" |
Maximum delay between searches | CONFIG_SEARCH_DELAY_MAX |
searchSettings.readDelay.min |
string | "30sec" |
Minimum delay for reading | CONFIG_SEARCH_READ_DELAY_MIN |
searchSettings.readDelay.max |
string | "1min" |
Maximum delay for reading | CONFIG_SEARCH_READ_DELAY_MAX |
| Setting | Type | Default | Description | Docker environment variable |
|---|---|---|---|---|
debugLogs |
boolean | false |
Enable debug logging | CONFIG_DEBUG_LOGS |
consoleLogFilter.enabled |
boolean | false |
Enable console log filtering | CONFIG_LOG_FILTER_ENABLED |
consoleLogFilter.mode |
string | "whitelist" |
Filter mode (whitelist/blacklist) | CONFIG_LOG_FILTER_MODE |
consoleLogFilter.levels |
string[] | ["error", "warn"] |
Log levels to filter | CONFIG_LOG_FILTER_LEVELS* |
consoleLogFilter.keywords |
string[] | ["starting account"] |
Keywords to filter | CONFIG_LOG_FILTER_KEYWORDS* |
consoleLogFilter.regexPatterns |
string[] | [] |
Regex patterns for filtering |
Note
* Docker CONFIG_* array values are comma-separated strings e.g. "error,warn"
Regex pattenrs must be entered directly in the config.yaml
| Setting | Type | Default | Description | Docker environment variable |
|---|---|---|---|---|
proxy.queryEngine |
boolean | true |
Proxy query engine requests | CONFIG_PROXY_QUERY_ENGINE |
| Setting | Type | Default | Description | Docker environment variable |
|---|---|---|---|---|
webhook.discord.enabled |
boolean | false |
Enable Discord webhook | CONFIG_DISCORD_ENABLED |
webhook.discord.url |
string | "" |
Discord webhook URL | CONFIG_DISCORD_URL |
webhook.ntfy.enabled |
boolean | false |
Enable ntfy notifications | CONFIG_NTFY_ENABLED |
webhook.ntfy.url |
string | "" |
ntfy server URL | CONFIG_NTFY_URL |
webhook.ntfy.topic |
string | "" |
ntfy topic | CONFIG_NTFY_TOPIC |
webhook.ntfy.token |
string | "" |
ntfy authentication token | CONFIG_NTFY_TOKEN |
webhook.ntfy.title |
string | "Microsoft-Rewards-Script" |
Notification title | CONFIG_NTFY_TITLE |
webhook.ntfy.tags |
string[] | ["bot", "notify"] |
Notification tags | CONFIG_NTFY_TAGS * |
webhook.ntfy.priority |
number | 3 |
Notification priority (1-5) | CONFIG_NTFY_PRIORITY |
webhook.webhookLogFilter.enabled |
boolean | false |
Enable webhook log filtering | CONFIG_WEBHOOK_LOG_FILTER_ENABLED |
webhook.webhookLogFilter.mode |
string | "whitelist" |
Filter mode (whitelist/blacklist) | CONFIG_WEBHOOK_LOG_FILTER_MODE |
webhook.webhookLogFilter.levels |
string[] | ["error"] |
Log levels to send | CONFIG_WEBHOOK_LOG_FILTER_LEVELS * |
webhook.webhookLogFilter.keywords |
string[] | ["starting account", "select number", "collected"] |
Keywords to filter | CONFIG_WEBHOOK_LOG_FILTER_KEYWORDS * |
webhook.webhookLogFilter.regexPatterns |
string[] | [] |
Regex patterns for filtering |
Note
* Docker CONFIG_* array values are comma-separated strings e.g. "error,warn"
Regex pattenrs must be entered directly in the config.yaml
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 notifications.
Customize which notifications you receive with the keywords options.
Edit src/accounts.json.
Tip
Docker users can set account details directly in the compose.yaml, using a .env is recommended for sensitive information.
Docker will automatically create a valid accounts.json on container creation, and save the file in ./config/
Warning
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.
Tip
Most login issues can be fixed by deleting your /sessions folder, and redeploying the script
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.