M365 Fake Data Generator (and data migration)
A tool that turns empty M365 dev tenants into vibrant, realistic environments by generating users, fake files, emails, and activity. Instead of testing on lifeless shells, you get a tenant that behaves like a real one, credible and demo-ready. Bonus: it can migrate data between users when needed!
When we build or test a solution involving M365, we (thankfully!) don’t touch production data. Instead, we use Microsoft’s dev tenants, safer and smarter.
These tenants are great on paper: Exchange, OneDrive, SharePoint, Teams... all ready to go.
Well, almost ready, because out of the box, they’re just empty shells: No files, no folders, no emails, no Teams. Nothing...
And that’s where the pain kicks in: populating the tenant with realistic data that mirrors actual usage, both in quantity and structure.
Because let’s face it, a lifeless tenant doesn’t tell you much when you’re trying to validate a solution. It’s like test-driving a car with no engine.
I’ve already shared some handy scripts to automatically populate a M365 tenant with data, and that’s a solid start. But hey, why stop there? Let’s kick it up a notch and make that demo tenant feel truly alive, like it’s been buzzing for months! Fake users, real-world patterns, and just the right amount of organized chaos... all prepped and ready at the push of a button!
One ring to rule them all, one ring to find them,
One ring to bring them all, and in the darkness bind them...
… And here it is, the ring in our story: a powerful tool forged to unite all scripts in one place, binding them into a single flow to manage data creation across every corner of your M365 tenant.
It feeds Exchange, SharePoint, OneDrive, and Teams with realistic, structured data. You get full control over variability, scale, and timing, so your demo or dev tenant doesn’t just look alive… it feels alive.
I give it to you, my fellow tech aficionados, your precious is here:
🚨 Click here to show access and credentials 🚨
https://m365generator.point4.fr
login : GregHSH
Password : Bilbothehobbit
And as a Bonus: no more choking your internet line with endless uploads or scripts gone rogue. This tool runs in the cloud, feeds your M365 tenant smartly and efficiently, and lets you focus on what really matters: building, testing, and impressing your customers.
Enjoy, and may your demo tenants never be empty again! 🙏
HOW DOES IT WORK?
First of all, every connection runs in its own secure context, so whatever you do with the tool stays yours. Your tenant, your data, your operations. No shared sessions, no cross-tenant mix-ups, and definitely no unwanted surprises.
Privacy and isolation are baked in from the start.
Each user's session has it's own persistent UID stored in the browser's local storage, and it's verified with every action a user can perform. No UID = No actions.
1/ To get started, head to the "Setup & Deploy" tab and deploy the Enterprise Application.

Login via device code flow using your Microsoft 365 Global Admin account.

Deploy the Enterprise Application (this will register the required Azure App in your tenant and grant it the necessary Graph permissions).

if everything went smoothly, you should see a confirmation that looks like this

2/ Once your app is deployed, it’s showtime!
From the main dashboard, you’ve got the power to breathe life into every corner of your tenant. Here’s what you can spawn with a few clicks:
- Exchange → Fake emails with attachments, straight to the inbox
- OneDrive → Auto-filled with folders and randomly sized files
- SharePoint → Load up with documents or create slick modern pages
- Teams → Generate teams with channels ready for "collaboration"
- Conditional Access Policies → Add realistic security rules to spice things up
- Users → Create users packed with properties: names, countries, licenses, and more
It’s like building your own corporate sim, minus the meetings. 😉
The logic is the following:
In the 1st field, enter the target, either a user’s UPN (for Exchange, OneDrive, etc.) or a SharePoint site name.
In the 2nd field (Count), set the main quantity, like the number of emails, folders, or pages.
Some services need a bit more detail, enter a 3rd field (Sub-count) when required.
Count = number of folders
Sub-count = number of files per folder
Then just hit the button for the type of data you want to generate, and et voila, off it goes.

You’ll be taken to a live log screen, where you can watch twhat happen in real time: every action, every file, every user being created is logged so you know exactly what’s going on behind the scenes.

3/ Bonus round : want to scale it up for multiple users?
Look to the right of each button, you’ll spot a little 📄 icon.
That’s your gateway to CSV-powered generation!
Click it to upload a CSV file as the input for your job. Each row becomes a target (user or site), and the script will create data based on the quantity you’ve defined in Count and Sub-count fields.
That’s your golden ticket to unleash an army of users.
To handle multiple users and heavy API loads, the tool automatically manages token re-authentication, throttling (429 errors), and retries.
4/ Boost the power : automate it, orchestrate it.
Now let’s flip the switch, automation is ON!

It’s time to feed your M365 tenant with realistic, lively data tailored exactly to your needs. From users to emails, folders to Teams channels, every asset comes with just the right amount of variability to feel authentic.
This setup delivers a fully-loaded, demo-ready tenant in a single click.
One button, infinite possibilities.
Let the data party begin!
It works with cards, each tied to a specific data type, Email, OneDrive, SharePoint, and more.

Stack them up, and they form a chain, a flow of actions that runs automatically, step by step. Like dominoes, but way more productive!

Once everything’s in place and your flow is ready to roll, just drop in a "Run" card at the end.

A shiny Run Automation button appears, click it, and your entire flow springs into action, executing each step like clockwork. Sit back, relax, and watch your tenant come alive, one piece at a time. 🧩🧩🧩
Special cases: some cards come with a twist.
Here’s one of those fun-but-tricky scenarios:
Let’s say I want to create 25 users in Entra ID. Easy, I drop a "Users" card into the flow.
Now, I also want these users to get a mailbox. No problem! I tick the "Assign license" checkbox, and boom, each user gets an M365 license and therefore a mailbox. So far, so good.
But then comes the cool part: feeding those fresh new mailboxes with data.
And here's the catch: the users are randomly generated, so I won’t know their email addresses until the user creation step has actually run.
So how do we solve that? 🤔
That’s where orchestration shines, by chaining cards in sequence and letting the tool pass context between them. Once the users are created, their details can be used as dynamic input for the next card, like injecting emails into their inboxes automatically.
How to do that? Easy. 😎
Just drag the little crosshair icon next to the email field and drop it onto the Users card.

Boom, your Email card is now linked, and it will automatically grab the email addresses of the freshly created users.

No need to guess or hardcode anything, the flow does the heavy lifting and wires it all up dynamically.
Super satisfying, right?
Wait, wait, wait… but Greg, the automation failed!? 😱
Yes, because we create the 25 users, super fast...
Then assign the M365 licenses, still fast...
And then we try to generate emails for their mailboxes... but Azure’s not in a rush.
It can take up to 30 minutes to fully provision those mailboxes.
No stress, Azure’s on its own schedule! 😅
all the creation tasks are async, so I can run multiple API calls at the same time without waiting for Azure to respond one by one.
That's one way to speed up item creation.
(Except for OneDrive migration, I’ll explain why in the migration section.)
How do we solve that?
Simple, just drop in a "Waiting" card to pause the flow and give Azure the time it needs. Once the wait is over, the workflow picks right back up with the next card.

And there it is, a clean, seamless workflow that creates users and fills their mailboxes right after!
Match your data patterns
Sometimes you need to test a very specific scenario.
For example: “I want a mailbox with 5000 emails, where 50% have tiny attachments (1KB), 40% are medium (50KB–200KB), and 10% are chunky (1024KB–2048KB).”
Easy peasy, my friend, just use automation to stack the same card multiple times, each with a different data pattern.
One for the small files, one for the medium, one for the big boys.
Chain them together,

Migration between users
It could happen that you just need to clone one user's data to another, clean and simple. That’s where the Carbon Copy feature kicks in: Migration.
Pick a source, choose your target, and boom, data duplication without the manual mess.
It’s like Ctrl+C, Ctrl+V... but for M365.

Hit the Preview Migration button to get a sneak peek at the source dataset, make sure everything looks just right.

For Exchange, I use the new mail import/export feature in the Microsoft Graph API (still in beta).
Emails are imported in batches of 20 for better performance.
For OneDrive, I use MS Graph's delta query to fetch all items in a single paginated request (instead of going through each folder recursively).
Because of the limited memory on the current server, file uploads are done sequentially instead of in batches. It’s slower, but more stable for memory management, especially since some files can be quite large.
Feeling confident? Smash that Start Migration button!
Still a bit hesitant? No worries, run a Dry Run first to double-check everything without touching a byte.
Better safe, then sorry!

It’s also available as a card in the Automation Flow Builder, so you can easily chain it with other actions, like creating users.

et voilà! A perfectly balanced mailbox that hits your test case like a pro!