Test PIDs and Configurations
These are development and testing values only. Never ship them.
widgetId values are not interchangeable between placements. Pointing Banner or
Interstitial at Feed's MB_1 serves a feed — which renders as a wrong-looking or
apparently broken placement, and is one of the most common false bug reports.
Use the ID that belongs to the placement you are testing.
Media Placement
MediaPlacementConfig.pid is an int. Each test PID exercises a different creative
format:
| PID | Creative format |
|---|---|
| 84242 | Landscape video only |
| 127546 | Vertical video only |
| 127547 | Square video only |
| 128779 | Carousel only |
| 128780 | Multiple sizes and formats — the broadest test |
MediaPlacement(
config: MediaPlacementConfig(
pid: 84242,
articleUrl: 'https://example.com/article/123',
),
)
Validation mode
Forces a test creative, so the placement renders with no live campaign — useful for verifying layout and sizing:
MediaPlacementConfig(pid: 84242, enableValidationMode: true)
Feed Placement
| Parameter | Value |
|---|---|
widgetId | MB_1 |
installationKey | NANOWDGT01 |
articleUrl | https://mobile-demo.outbrain.com/ |
widgetIndex | 0 |
FeedPlacement(
config: FeedPlacementConfig(
widgetId: 'MB_1',
installationKey: 'NANOWDGT01',
articleUrl: 'https://mobile-demo.outbrain.com/',
widgetIndex: 0,
),
)
Other test widget IDs — MB_2 and TEST_FEED, with NANOWDGT01 or
TESTKEY01 — also serve feeds, and are useful when testing two Feed placements on one
page.
A placement with a non-zero widgetIndex only loads if a widgetIndex: 0 placement
loads on the same page. Testing widgetIndex: 1 alone shows an ad that never
arrives and no error. See the
Integration Guide.
Banner Placement
| Parameter | Value |
|---|---|
widgetId | MB_10 |
installationKey | NANOWDGT01 |
articleUrl | https://mobile-demo.outbrain.com/ |
BannerPlacement(
config: BannerPlacementConfig(
widgetId: 'MB_10',
installationKey: 'NANOWDGT01',
articleUrl: 'https://mobile-demo.outbrain.com/',
),
)
testDisplay: true forces a test creative for Banner and Feed, the way
enableValidationMode does for Media.
Interstitial Placement
| Parameter | Value |
|---|---|
widgetId | INT_MW_1 |
installationKey | NANOWDGT01 |
articleUrl | https://mobile-demo.outbrain.com |
final interstitial = await InterstitialPlacement.create(
config: InterstitialPlacementConfig(
widgetId: 'INT_MW_1',
installationKey: 'NANOWDGT01',
articleUrl: 'https://mobile-demo.outbrain.com',
),
);
await interstitial.load();
if (await interstitial.isReady) await interstitial.show();
Recommendations
| Parameter | Value |
|---|---|
widgetId | SDK_1, RECS_1 or TEST_RECS |
articleUrl | https://test-demo.outbrain.com |
final recommendations = await Recommendations.fetch(
RecommendationsPlacementConfig.url(
widgetId: 'SDK_1',
articleUrl: 'https://test-demo.outbrain.com',
),
);
debugPrint('Got ${recommendations.length} recommendations');
Quick Reference
| Placement | Test ID | Installation key |
|---|---|---|
| Media | pid: 84242 | — (uses your app key) |
| Feed | MB_1 | NANOWDGT01 |
| Banner | MB_10 | NANOWDGT01 |
| Interstitial | INT_MW_1 | NANOWDGT01 |
| Recommendations | SDK_1 | — (uses your app key) |
These are the same defaults the native iOS and Android demo apps use. They demonstrate the integration, but are not guaranteed to return a live creative in every environment — an empty result from a test ID is not necessarily an integration fault.
Testing Best Practices
During development
- Match the PID to the format you're laying out — test vertical creatives against
127546, not84242, if that is what your slot must accommodate - Use
128780for a broad sweep of sizes through one slot - Turn up logging:
TeadsLog.level = LogLevel.debug— see Logging - Enable validation mode while checking sizing, then remove it
Validation
- Confirm placements are fully visible and clickable, with nothing overlaying them
- Confirm event callbacks fire
- Exercise Feed pagination by scrolling to the end
- Enter and exit Feed fullscreen video
- Rotate the device — on iOS, only if you have forwarded
viewWillTransition
Pre-production checklist
- All test PIDs and widget IDs replaced with production values
-
enableValidationModeremoved from everyMediaPlacementConfig -
testDisplayremoved from every Feed and Banner config -
TeadsLog.levelback to its default, or your own level -
articleUrlpoints at real content -
app-ads.txtverified - Privacy compliance verified
Common Testing Issues
No ads loading
- Confirm
TeadsSdk.configure()ran and did not throw - Confirm the ID belongs to the placement you're testing
- Check connectivity — and on an Android emulator, see the DNS note in the Troubleshooting Guide
- Raise the log level and look for an error
A feed appears where a banner should be
You are using a Feed widget ID for Banner or Interstitial. Use MB_10 or INT_MW_1.
An ad loads on one screen but not another
If the failing screen has a Feed placement with a non-zero widgetIndex and no
widgetIndex: 0 placement, that is the cause.
Related Documentation
- Integration Guide — complete implementation for each placement
- Prerequisites — pre-release checklist
- Settings & Configuration — every config field
- Troubleshooting Guide — common issues