Automate your daily Bing searches to collect Microsoft Rewards points.
Features • Getting started • Usage • Configuration • Build • Project structure • Troubleshooting
An Android-first Flutter app that signs you into your Microsoft account inside an embedded web view, then runs configurable Bing searches to earn Microsoft Rewards points hands-free.
Warning
Automating searches may violate Microsoft Rewards terms. Use responsibly and at your own risk.
- Automated Bing searches - configurable count and delay between queries, with live progress and cancel support
- Microsoft sign-in - login through the official Microsoft account flow in an embedded web view, session persisted across restarts
- Material You theming - dynamic wallpaper colors on Android 12+, with a classic seed-color fallback on older devices
- AMOLED dark mode - a pure-black theme for OLED displays, where off pixels save battery
- Simulated screen off - cover the screen with pure black while a search runs, so the display looks off on OLED panels; tap or back to wake it
- Daily reminders - timezone-aware local notification at a time you pick, per day
- Keep screen on - optional wake lock during searches so the device does not sleep mid-run
- Settings persisted - theme, reminders, and search preferences survive restarts
- Flutter SDK (stable channel) with Dart
>=3.7.0 - A device or emulator (Android recommended for Material You and AMOLED features)
# Install dependencies
flutter pub get
# Run on a connected device or emulator
flutter runThe app opens to a login screen. Sign in with your Microsoft account in the embedded browser; once it returns to Bing signed in, tap Continue and you are taken to the search screen.
- Log in with your Microsoft Rewards account through the embedded sign-in page.
- Set the number of searches (1–50) and the delay between searches.
- Press Start Search — Bing queries open in the embedded web view, with a progress bar and current count.
- Press Cancel or the back button any time to stop mid-run.
Tip
Use lower count and longer delay values to behave more like a human and reduce point-flagging risk.
All settings live in the Config tab (bottom-right of the search screen).
| Setting | Options | Description |
|---|---|---|
| Theme | System / Light / Dark / AMOLED | AMOLED turns every surface pure black (#000000) for OLED screens. System follows the device's dark/light preference |
| Simulate screen off | On/Off | While on, starts a search‑time pure-black overlay that hides the UI — looks like a powered-off display on OLED; tap or press back to wake it for the current run (the toggle stays on, so the next search dims again) |
| Daily reminder | On/Off + time | Schedules a daily local notification at the chosen time, timezone-aware |
| Keep screen on | On (default) | Acquires a wake lock while searching so the screen stays awake |
- Settings persisted - theme, reminders, and search preferences survive restarts
Theme and overlay choices are persisted via SharedPreferences under theme_mode and amoled_screen_off keys (defaults: system / false).
flutter build apk --release # Android release APK
flutter build ios # iOS (requires macOS + Xcode)Icons are generated from assets/images/auto_search.png via flutter_launcher_icons:
dart run flutter_launcher_iconsThe codebase follows a feature-first clean-architecture layout (layers per feature: data, domain, presentation):
lib/
├── main.dart # Bootstrap: DI → notifications → Bloc observer → runApp
├── app.dart # MaterialApp, Material You wiring, theme mode
├── core/
│ ├── di/ # GetIt container + search cancellation token
│ ├── theme/ # AppTheme (light/dark/AMOLED) + ThemeController
│ ├── constants/ # App constants, string copy
│ ├── utils/ # Error mapping, search helper, validators
│ └── widgets/ # Reusable CustomButton, CustomTextField, ...
├── features/
│ └── search/
│ ├── data/ # Random query generation
│ ├── domain/ # SearchRepository contract, impl, PerformSearch use case
│ └── presentation/ # Bloc (events/states) + pages (login, search, config)
└── notifications/ # Local notifications + timezone setup
State management uses flutter_bloc (search flow: SearchInProgress → SearchSuccess / SearchFailure, cooperative cancellation via token) and get_it for dependency injection.
- Search does not start - make sure the search screen's browser shows you signed in to Bing (hint under the form) before pressing Start.
- No points awarded after a run - Bing may batch or delay rewards, or duplicate queries may not count. Increase delay and vary counts.
- Login stuck - log out from the Config tab (clears cookies), then sign in again.
- Dynamic colors missing - Material You only works on Android 12+; older devices fall back to the branded seed color.