Design and Architecture
System requirements and core technology
CampaignBuilder aspires to be an important part of that very critical job: making your SEM efforts more successul. We don't expect that it is the only tool in your arsenal, but we understand the significance of our responsibility to our users to make sure it works well and continues to serve your needs every day. Well into the future.
That's what this section of the docs is all about. Providing some perspective on where CampaignBuilder came from, how it was conceived and constructed, and where are we going with it. We recognized how important Google pay per click advertising is to the companies that use it.
How seriously do we take the business of search campaigns? For many companies (like the one we ran for 12 years prior to starting GPF Toolkit), SEM is the only source of revenue.
CampaignBuilder Origins
This software came from three generations of in-house developed tools. Tools that were developed to provide a competitive advantage in the Google pay-per-click marketing venue. Our team was running a company that relied on SEM completely for its revenue as well as doing consulting for other SEM users.
Here's a brief overview of the functionality we created. The ability to create complete sets of campaigns driven off user-supplied data. Store and access many versions of all the campaign detailed information such as keyword lists. Move sets of campaigns into Google Ads quickly and under control. These three sets of tools evolved from spreadsheets and macros (in 2012), to Google sheets and coding (in 2014), all the way to javascript and Google Datastore applications (in 2016).
Helping users to create and manage Google Ads search campaigns
While this job (helping users to . . . ) requires a complex integration of business objectives, technical architecture, and environmental constraints (meaning things like cost, speed, simplicity, integration, etc.), the final product (system) has to deliver functionality that users can use and benefit from.
Here are the user requirements we started with:
- The interface has to be simple and intuitive. Settings like device types and ad schedules are simple push button choices. It has guides that simplify the job of creating keywords and ads. Experienced users can copy/paste their keywords and ads into the CampaignBuilder using the “bulk loader” function.
- Users should easily see what their campaigns will look like. Including all the parts that are loaded into your production account. You can view your ads with the extensions as they will appear on a Google search results page. You can see problems and correct them in a few seconds.
- New users should be able to get through campaign design easily. Because it helps you create a “single theme campaign”* designed around one customer need in one location (“emergency burn care in Denver”, for example). Everything is stored in a “Project” that you can save, update, and reuse. Complicated campaigns can be designed more simply because all the parts are maintained in project records. When you want to change something, you have a record of it and it is clear and under control.
- Help in avoiding the most common campaign design mistakes. CampaignBuilder starts with a simple campaign that works and never deviates from that. As you expand and develop your campaign, and create sets of campaigns, you remain in an interface that is connected to Editor. You can’t create an ad that doesn’t belong in the right adgroup. You can’t create a URL that isn’t properly configured.
- Changes should only take a few seconds. CampaignBuilder makes it easy to test and fix. When designing, testing for syntax/rules errors, or running in production. When you need to correct something it only takes a few minutes to recreate and then reload the campaigns. Without error.
- Entire campaigns/sets can be managed easily as a unit. Each campaign works as a unit. Sets of campaigns covering different markets need to work together. CampaignBuilder makes the complete campaign come together as a unit. You can see the settings, keywords, ads, landing URL’s, etc altogether and it becomes much easier to design the campaign to work as you want. Sets of campaigns which cover all the markets can be developed, measured, and managed as a unit.
What would the benefits be to the user?
Provide a complete Google Ads modeling environment. Our vision is to provide a complete environment for designing, developing, and testing Google Ads accounts. Users will be able to design complete sets of campaigns in just minutes. Your team will be able to try out alternatives quickly and easily. Keywords, ads, and extensions will be designed using creative combinations of geography, products/services, and features. Everything will be done as systematically and programmatically as possible. The CampaignBuilder will enable users to access all the functions and features of Google Ads with minimal effort and frustration.
- Save users a huge amount of time. Just like TurboTax® helps you to do your taxes much better and with a fraction of the effort, the CampaignBuilder helps you make Google Ads work a lot better with a lot less effort and a lot less frustration. No relationship or endorsement is implied here w/r/t TurboTax®. Without the CampaignBuilder, Google Ads can be very time consuming. Fixing errors only to cause other errors. Changes in settings that cause big problems. Creating inconsistencies between campaigns that seem to get worse. Long and painful efforts to update your production account. And it saves you time the very first time you use it. That’s true if you are just starting out with Google Ads. And it’s true if you are an experienced Google Ads pro. When you use CampaignBuilder, the hard parts of creating Ads campaigns are handled systematically for you.
- Provide a productivity advantage that grows over time. CampaignBuilder design goes way beyond just getting your first set of campaigns “out the door” easier than without it. The advantage the the CampaignBuilder holds over conventional methods grows as you add new campaigns and make the changes that improve account performance. When Google decides to make major changes (such as additional fields to Expanded Text Ads), the effort to adjust your account to accommodate is significantly easier due to the CampaignBuilder.
- Help users choose features that improve campaign performance. In addition to saving you time, errors, and frustration, CampaignBuilder has features that help you improve the performance of your Google Ads account. These features help you do better at attracting potential buyers while also helping you to avoid clicks from non-buyers. This leads to more clicks at a lower cost and more clicks that drive higher conversion rates.
- Help users use location to improve relevance. CampaignBuilder makes it simple to use the customer’s city or zip code in your keywords and ads. Most businesses have the opportunity to leverage location “terms” because it’s where the customer is and where they will be receiving the goods or services. CampaignBuilder not only can add location terms to ads/keywords, but it simplifies your keywords and ads (campaign design) because location terms (a zip or city, for example) are handled by CampaignBuilder. So you have much more compact keyword lists. Your keywords and ads become a short list of “templates” where you can integrate location terms.
- Leverage the campaign designs and information already there. CampaignBuilder makes cloning and modifying a campaign something that takes a few minutes. So you can build campaigns that are quite specific to a particular customer need and do quite well on the relevance measure versus any competing ads. The parts of your keywords and ads you want to keep or modify are there. You can add new ones just as easily. This way you can take advantage of what works across as many customer needs as you have. And take a fresh approach where it is called for.
- Find the markets that perform: for each customer need. CampaignBuilder makes it easy to create separate campaigns for individual cities, states, or zip codes. Some things work well in Los Angeles. Some don’t. Some things work well in Southfield that fail in Detroit. CampaignBuilder helps you to discover the markets that work for your business. And bid/budget them separately.
- Help users to customize and experiment. One of Google Ads very best features is its ability to run what are called “Experiments”. Think of it this way. You create a perfect copy of a campaign and make one or two very specific changes. Let’s call those two campaigns A1 and A2. What Ads lets you do is run those together and very scientifically measure which one works better. This makes experimentation way more productive. The CampaignBuilder makes creating campaigns and experimenting with changes very easy and under control. This makes your ability to use Experiments a lot more productive.
An overview of the technical strategy behind CampaignBuilder
Three generations of toolsets evolved over a 7 year period. In a number of ways, we have had a real advantage in the methods we could use for creating CampaignBuilder. Remember, that this set of functions/features was born out of three distinct generations of toolsets that were developed out of spreadsheets, scripts, databases, API programming, and coding within Google Ads and outside of it. Over that seven year period, we could gain a very good, fundamental understanding of the data/architecture of Google Ads and use it to create a system that adds to that functionality without making it harder in any way. And that is the tough objective for software development: improving the process without introducing divergence from the baseline tools and methods. In this case, Google Ads and Ads Editor.
- A brand new architecture in 2018. When it came time to actually create an architecture that could support the functionality, users, and future we envisioned for CampaignBuilder (in 2018), we had a very large advantage: The ability to rebuild the functionality we knew well (from the three generations of tools) using all of the best systems development architecture elements available in 2018. It is hard to describe what an advantage this is. A fresh start wih the Google DataStore. A fresh start organizing our functions around object relational mapping. A fresh start with powerful visualization tools such as AG Grid. This opportunity to architect from scratch in 2018 with the state of the art tools availabe within the past few years was GOLD.
- Object Relational Mapping and the Google Cloud Platform. The challenge is to manage all the data and metadata in all the ways that the CampaignBuilder needs to manipulate it, access it, and express it. The benefits of ORM implemented through the GCP are extensive in terms of creating that kind of power and flexibility in one integrated set of programs. With virtually infinite capacity and speed
- Typescript data definition. CampaignBuilder's data architecture provides a strict typecast data definition (typescript) stored in a NoSQL database (DataStore) and document storage (Storage Bucket) that provides maintainability, expandibility, performance, and scalability.
- Typescript provides error free coding, developer collaboration with the ability to quickly add future features (new extension types)
- DataStore provides secure, perfomant database interactivity for projects with the flexibilty for adding future features. Ready to scale for growing customers.
- Storage Bucket provides secure, performant generation and storage of ECF files with capacity for very large ECF files for Campaign Cloning and Analyzing.
- Custom cell rendering using Ag Grid. Google Ads campaigns are an integration of many parts. Each of those parts behaves very differently. Keyword. Negative keyword. Campaign settings. Site Link. And yet, users must understand EXACTLY how those parts will work together. The first problem: users can’t even see these parts together. So we set out to architect web services that would allow us to create integrated display of all the key campaign components at once, while highlighting the most significant elements (such as the landing URL).
- Microservices Architecture on the Google App Engine. Microservices refers to an architectural style for developing applications. Microservices allow a large application to be decomposed into independent constituent parts, with each part having its own realm of responsibility. To serve a single user or API request, a microservices-based application can call many internal microservices to compose its response.