For my day job, I was tasked with building a Salesforce app. At the time, I had zero experience with Salesforce. After a month or so of building the app, I realized that I would eventually need sample data to test and demo the app.
For those unfamiliar with Salesforce, you can't just cut and paste data into salesforce. Programmatically entering data also isn't very easy because there is no way to perform SQL (or SOQL) insert statements. The other difficulty is that Salesforce hinges on the fact that you have related records. So, you also have to insert data in the correct order and properly link them.
Obviously, I didn't want to spend tens of hours manually entering and perfecting the data, so I started to look for solutions:
(0) Use a sandbox of your current Salesforce org.
(1) Use the sample data Salesforce gives you by default.
(2) Use Populate, a free AppExchange app.
(3) Use a mock data generator external to Salesforce (Mockaroo, GenerateData.com). After generating the data, you must upload the data to Salesforce one object at a time. If you want linked objects, you have to download the records after you upload them to retrieve IDs. Then you paste those IDs into the next object's data and upload. If you didn't understand any of that, just know IT'S A MESSY PROCESS. And this is the standard process. The good part is that this method is the only way to get data for custom objects and fields.
After researching all the options, I was surprised that there wasn't an easier way to do this. Even though I was new to Salesforce, I knew it was possible. So I started building!
I needed to solve for the following: