MCPcopy Index your code
hub / github.com/TheNetsky/Microsoft-Rewards-Script

github.com/TheNetsky/Microsoft-Rewards-Script @v4.0.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v4.0.2 ↗ · + Follow
539 symbols 1,385 edges 59 files 0 documented · 0% updated 3d agov4.0.2 · 2026-07-05★ 8504 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Discord Latest Build Docker

[!TIP] This version supports the new, modern Bing Rewards dashboard only - it does not support the legacy dashboard. If your account still uses the old dashboard, use the v3 branch and v3.x releases instead!

Use at your own risk - some features may not work as expected.


Table of Contents


Quick Setup

Bare metal

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.

Account Setup

  • Copy and rename env.example to .env and add your account credentials:
ACCOUNT_1_EMAIL=email@example.com
ACCOUNT_1_PASSWORD=your_password

[!NOTE] Add one ACCOUNT_N_* block per account, numbered from 1 with no gaps — the script stops at the first missing ACCOUNT_N_EMAIL. Optional per-account fields cover recovery email, locale (ACCOUNT_N_GEO_LOCALE defaults to auto, the locale of your Microsoft profile), language, proxy, and fingerprint persistence — see env.example for all of them.

[!TIP] For 2FA accounts, set ACCOUNT_N_TOTP_SECRET and the script will generate and enter the 6-digit code automatically. To get the secret: in your Microsoft Security settings open 'Manage how you sign in', add an Authenticator app, and when the QR code appears choose 'enter code manually' — use that code as the value in your .env.

[!WARNING] You must rebuild your script after making any changes to the .env.

Config Setup

[!WARNING] Do not skip this step if you are running the script bare metal.

  • Bare metal: Copy or rename config.example.json to config.json (in the project root) and customize your preferences.
  • Docker: A valid config.json is automatically created on first run and saved locally to ./config/. You can optionally manually create a config.json (e.g., if you need to specify regex values) using the provided config.example.json

[!CAUTION] Prior versions of accounts.json and config.json are not compatible with current release.

Build and run the script (bare metal version)

npm run pre-build
npm run build
npm run start

Docker

ACCOUNT_1_EMAIL=email@example.com
ACCOUNT_1_PASSWORD=your_password
  • Review compose.yaml to 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, etc.). A full list of available options are in the table below. CONFIG_* variables 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.


Nix Setup

If using Nix: bash scripts/nix/run.sh


Configuration Options

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.

Core

Setting Type Default Description Docker environment variable
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
ensureStreakProtection boolean true Ensure streak protection is enabled CONFIG_ENSURE_STREAK_PROTECTION
autoClaimPunchcardRewards boolean false Auto-claim completed punchcard rewards CONFIG_AUTO_CLAIM_PUNCHCARD_REWARDS
skipNonPointTasks boolean true Skip tasks that award no points CONFIG_SKIP_NON_POINT_TASKS
searchOnBingLocalQueries boolean false Use the local query list for ExploreOnBing CONFIG_SEARCH_ON_BING_LOCAL
globalTimeout string "30sec" Timeout for all actions CONFIG_GLOBAL_TIMEOUT

Workers

Setting Type Default Description Docker environment variable
workers.doDailySet boolean true Complete daily set CONFIG_WORKER_DAILY_SET
workers.doClaimBonusPoints boolean true Claim bonus points CONFIG_WORKER_CLAIM_BONUS_POINTS
workers.doMorePromotions boolean true Complete "more activities" 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.doBonusSearches boolean false Farm bonus searches beyond the cap CONFIG_WORKER_BONUS_SEARCHES
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
workers.doActivateSearchPerk boolean true Activate the "search Nx more" perk when present (runs after the daily set) CONFIG_WORKER_ACTIVATE_SEARCH_PERK
workers.doVisualSearch boolean false Activate the visual-search streak and perform visual searches CONFIG_WORKER_VISUAL_SEARCH

Activities

Setting Type Default Description Docker environment variable
activities.urlReward boolean true Complete URL reward activities CONFIG_ACTIVITY_URL_REWARD
activities.searchOnBing boolean true Complete ExploreOnBing offers CONFIG_ACTIVITY_SEARCH_ON_BING

Search Settings

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.runOnZeroPoints boolean false Run searches even when no search points remain CONFIG_SEARCH_RUN_ON_ZERO_POINTS
searchSettings.maxBonusSearches number 110 Max bonus searches per run (when doBonusSearches is on) CONFIG_SEARCH_MAX_BONUS_SEARCHES
searchSettings.parallelSearching boolean true Run searches in parallel CONFIG_SEARCH_PARALLEL
searchSettings.queryEngines string[] see Query sources Sources used to build the search query pool CONFIG_SEARCH_QUERY_ENGINES *
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

[!NOTE] * Docker CONFIG_* array values are comma-separated strings e.g. "error,warn". Regex patterns must be set directly in config.json.

Query sources

searchSettings.queryEngines controls where search queries come from. Pick any combination; topics from all selected sources are pooled, de-duplicated, and expanded with Bing autosuggest/related terms.

Core sources:

Selector Source
google Google Trends (trending searches)
wikipedia Wikipedia most-read articles (previous day)
wikirandom Random Wikipedia articles
hackernews Hacker News front-page stories
reddit Reddit r/popular post titles
local Bundled src/functions/search-queries.json list

RSS feeds use a dotted path - rss for every feed, rss.<site> for a whole site, or rss.<site>.<endpoint> for a single feed:

Selector Feeds
rss.googleTrends Google Trends RSS (gb, us)
rss.googleNews Google News (gb, us, world, technology, business)
rss.bbc BBC News (top, world, technology, business, science)
rss.guardian The Guardian (international, world, technology)
rss.theVerge The Verge (all)

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 229
Interface 127
Function 80
Class 72
Enum 31

Languages

TypeScript100%

Modules by API surface

src/interface/DashboardData.ts72 symbols
src/browser/ReactFunc.ts29 symbols
src/browser/BrowserFunc.ts28 symbols
src/functions/QueryEngine.ts26 symbols
scripts/utils.js24 symbols
src/index.ts21 symbols
src/interface/AppUserData.ts18 symbols
src/functions/activities/browser/Search.ts17 symbols
src/logging/Logger.ts15 symbols
src/util/Utils.ts13 symbols
src/functions/Workers.ts13 symbols
src/browser/auth/Login.ts13 symbols

For agents

$ claude mcp add Microsoft-Rewards-Script \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page