12 KiB
Microsoft-Rewards-Rewi
🚀 Quick Setup (Recommended)
Easiest way to get started — download and run:
-
Clone the repository:
git clone https://github.com/LightZirconite/Microsoft-Rewards-Rewi.git cd Microsoft-Rewards-Rewi -
Run the setup script:
- Windows: double-click
setup/setup.bator run it from a command prompt - Linux / macOS / WSL:
bash setup/setup.sh - Alternative (any platform):
npm run setup
- Windows: double-click
-
Follow the setup prompts. The script will:
- Rename
accounts.example.jsonc→accounts.jsonc - Ask for Microsoft account credentials
- Remind you to review
config.jsonc - Install dependencies (
npm install) - Build the project (
npm run build) - Optionally start the script
- Rename
That's it — the setup script handles the rest.
⚙️ Advanced Setup Options
Nix Users
- Install Nix from https://nixos.org/
- Run:
./run.sh
Manual Setup (if setup script fails)
- Copy
src/accounts.example.jsonc→src/accounts.jsoncand add your accounts. - Edit
src/config.jsoncas needed. - Install dependencies:
npm install - Build:
npm run build - Start:
npm run start
🐳 Docker Setup (Experimental)
Before starting:
- Remove local
/node_modulesand/distif you previously built. - Remove old Docker volumes when upgrading from older versions.
- You can reuse older
accounts.jsonc.
Quick Docker (recommended for scheduling):
- Clone the repository and configure
accounts.jsonc(or rename fromaccounts.example.jsonc). - Ensure
config.jsonchas"headless": truein browser settings. - Edit
compose.yaml:- Set
TZ(timezone) - Choose scheduling mode:
- Option A (default): Built-in scheduler — configure
scheduleinconfig.jsonc - Option B (cron): Uncomment
USE_CRON: "true"and setCRON_SCHEDULE
- Option A (default): Built-in scheduler — configure
- Optional:
RUN_ON_START=true(runs once immediately on container start)
- Set
- Start:
docker compose up -d - Monitor:
docker logs -f microsoft-rewards-script
Scheduling Options
Built-in Scheduler (Default):
# In docker-compose.yml - no cron variables needed
environment:
TZ: "Europe/Paris"
// In config.jsonc
{
"schedule": {
"enabled": true,
"time24": "09:00",
"timeZone": "Europe/Paris"
}
}
Native Cron (Traditional):
# In docker-compose.yml
environment:
TZ: "Europe/Paris"
USE_CRON: "true"
CRON_SCHEDULE: "0 9,16,21 * * *" # 9 AM, 4 PM, 9 PM
RUN_ON_START: "true"
Use crontab.guru for cron syntax help.
See Docker Documentation for detailed setup and troubleshooting.
📋 Usage Notes
- Headless=false cleanup: If you stop the script without closing browser windows, use Task Manager or run
npm run kill-chrome-win(Windows) to close leftover instances. - Scheduling advice: Run at least once or twice daily. Use
"runOnZeroPoints": falsein config to skip runs when no points are available. - Multiple accounts: Use
clustersinconfig.jsoncto run accounts in parallel. - Built-in scheduler: Enable
schedule.enabledinconfig.jsoncto run automatically without external cron jobs.
⚙️ Configuration Reference
Edit src/config.jsonc to customize behavior. See the full configuration documentation for detailed explanations.
Core Settings
| Setting | Description | Default |
|---|---|---|
baseURL |
Microsoft Rewards URL | https://rewards.bing.com |
sessionPath |
Session/fingerprint storage | sessions |
browser.headless |
Run browser in background | false |
browser.globalTimeout |
Max timeout for operations | 30s |
execution.parallel |
Run mobile/desktop tasks at once | false |
execution.runOnZeroPoints |
Run when no points available | false |
execution.clusters |
Concurrent account instances | 1 |
execution.passesPerRun |
How many times to process each account | 3 |
Fingerprint Settings
| Setting | Description | Default |
|---|---|---|
fingerprinting.saveFingerprint.mobile |
Reuse mobile fingerprint | true |
fingerprinting.saveFingerprint.desktop |
Reuse desktop fingerprint | true |
Task Settings
| Setting | Description | Default |
|---|---|---|
workers.doDailySet |
Complete daily set | true |
workers.doMorePromotions |
Complete promotional offers | true |
workers.doPunchCards |
Complete punchcard tasks | true |
workers.doDesktopSearch |
Perform desktop searches | true |
workers.doMobileSearch |
Perform mobile searches | true |
workers.doDailyCheckIn |
Complete daily check-in | true |
workers.doReadToEarn |
Complete read-to-earn tasks | true |
workers.bundleDailySetWithSearch |
Run desktop searches after Daily Set | true |
Search Settings
| Setting | Description | Default |
|---|---|---|
search.useLocalQueries |
Use locale-specific query sources | true |
search.settings.useGeoLocaleQueries |
Use region-specific queries | true |
search.settings.scrollRandomResults |
Random scrolling on results | true |
search.settings.clickRandomResults |
Random link clicks | true |
search.settings.retryMobileSearchAmount |
Mobile retry attempts | 2 |
search.settings.delay.min |
Minimum delay between searches | 1min |
search.settings.delay.max |
Maximum delay between searches | 5min |
Query Diversity Engine
| Setting | Description | Default |
|---|---|---|
queryDiversity.enabled |
Multi-source query generation | true |
queryDiversity.sources |
Available query sources | ["google-trends", "reddit", "local-fallback"] |
queryDiversity.maxQueriesPerSource |
Max queries per source | 10 |
queryDiversity.cacheMinutes |
Cache duration in minutes | 30 |
Humanization & Natural Behavior
| Setting | Description | Default |
|---|---|---|
humanization.enabled |
Enable human-like behavior patterns | true |
humanization.stopOnBan |
Stop processing accounts on ban detection | true |
humanization.immediateBanAlert |
Send immediate alert on ban | true |
humanization.actionDelay.min |
Minimum action delay (ms) | 500 |
humanization.actionDelay.max |
Maximum action delay (ms) | 2200 |
humanization.gestureMoveProb |
Mouse gesture probability | 0.65 |
humanization.gestureScrollProb |
Scroll gesture probability | 0.4 |
vacation.enabled |
Monthly vacation mode | true |
vacation.minDays |
Minimum vacation days per month | 2 |
vacation.maxDays |
Maximum vacation days per month | 4 |
Risk Management & Security
| Setting | Description | Default |
|---|---|---|
riskManagement.enabled |
Dynamic delay adjustment | true |
riskManagement.autoAdjustDelays |
Auto-adjust delays on risk detection | true |
riskManagement.stopOnCritical |
Stop on critical risk level | false |
riskManagement.banPrediction |
ML-based ban prediction | true |
riskManagement.riskThreshold |
Risk threshold (0-100) | 75 |
Scheduling (Built-in)
| Setting | Description | Default |
|---|---|---|
schedule.enabled |
Enable built-in scheduler | false |
schedule.useAmPm |
Use 12-hour time format | false |
schedule.time12 |
Time in 12-hour format | 9:00 AM |
schedule.time24 |
Time in 24-hour format | 09:00 |
schedule.timeZone |
IANA timezone | Europe/Paris |
schedule.runImmediatelyOnStart |
Run on process start | false |
Job State Management
| Setting | Description | Default |
|---|---|---|
jobState.enabled |
Save state to avoid duplicate work | true |
jobState.dir |
Custom state directory | "" |
Proxy Settings
| Setting | Description | Default |
|---|---|---|
proxy.proxyGoogleTrends |
Proxy Google Trends requests | true |
proxy.proxyBingTerms |
Proxy Bing Terms requests | true |
Notification Settings
| Setting | Description | Default |
|---|---|---|
webhook.enabled |
Enable Discord webhook | false |
webhook.url |
Discord webhook URL | "" |
conclusionWebhook.enabled |
Summary-only webhook | false |
conclusionWebhook.url |
Summary webhook URL | "" |
ntfy.enabled |
Enable NTFY notifications | false |
ntfy.url |
NTFY server URL | "" |
ntfy.topic |
NTFY topic | rewards |
ntfy.authToken |
NTFY auth token | "" |
Logging & Diagnostics
| Setting | Description | Default |
|---|---|---|
logging.excludeFunc |
Exclude log categories | ["SEARCH-CLOSE-TABS", "LOGIN-NO-PROMPT", "FLOW"] |
logging.webhookExcludeFunc |
Exclude from webhook logs | ["SEARCH-CLOSE-TABS", "LOGIN-NO-PROMPT", "FLOW"] |
logging.redactEmails |
Redact email addresses in logs | true |
diagnostics.enabled |
Capture diagnostic data | true |
diagnostics.saveScreenshot |
Save screenshots on failure | true |
diagnostics.saveHtml |
Save HTML on failure | true |
diagnostics.maxPerRun |
Max diagnostics per run | 2 |
diagnostics.retentionDays |
Days to keep diagnostics | 7 |
Analytics
| Setting | Description | Default |
|---|---|---|
analytics.enabled |
Performance dashboard tracking | true |
analytics.retentionDays |
Data retention period | 30 |
analytics.exportMarkdown |
Generate markdown reports | true |
analytics.webhookSummary |
Send analytics via webhook | true |
Update Settings
| Setting | Description | Default |
|---|---|---|
update.git |
Enable git auto-update | true |
update.docker |
Enable docker auto-update | false |
update.scriptPath |
Custom updater script path | setup/update/update.mjs |
update.autoUpdateConfig |
Auto-merge config changes | true |
update.autoUpdateAccounts |
Auto-merge account changes | true |
📚 Documentation
For detailed information about configuration, features, and advanced usage, please refer to the documentation in the docs/ folder. Start with docs/index.md for an overview and navigation to specific topics.
⚠️ Disclaimer
Use at your own risk. Automation may violate Microsoft's Terms of Service and can result in suspension or permanent banning of your Microsoft Rewards account. This project is provided for educational purposes only. The developer is not responsible for any actions taken by Microsoft against your account.
📄 License
This project is licensed under a PROPRIETARY license. See LICENSE for details.