Account Settings

Does SpringServe offer two factor authentication (2FA)?

Yes! 2FA allows you two layers of security in your SpringServe account: password and 2FA code on your mobile device. When enabling 2FA, you will need to install a 2FA app on your mobile device, such as Google Authenticator or Authy. Enable 2FA on the Edit Profile page, which can be accessed from the user menu.

Upon enabling, a QR code will appear. Open your 2FA app and scan this code. Your 2FA app will now provide you with a 6-digit one time password which refreshes periodically.

When logging in, you will be prompted to enter your password and your 2FA code. Open your 2FA app and enter the code for your SpringServe account, ensuring you have a few seconds before the code refreshes. Note that you also have the option to remember your device for 30 days. Checking this box will allow SpringServe to remember your user for 30 days or until you clear your cookies.

How do I reset my password?

When a user tries to login 3 times with the wrong password or 2fa code, the user will get a link in his or her email to unlock and will have to log in through clicking that link.

What do I do if I lose my 2FA device?

If you lose your mobile device with your 2FA app on it, you will have to set up 2FA on your new device. Contact support@springserve.com and tell them that you need to set up 2FA on a new device.

How do I add more users?

Go to Settings → Users and click +User.

How do I create a client account for my supply/demand partners?

Go to Settings → Users and click +User. Here, you can enter the details of your client. Select Supply/Demand Client in the Type dropdown list. When Supply/Demand Client is selected, a box will appear and you can select the relevant Supply/Demand Partner(s) for this client user.

Once you have created the account for your Supply/Demand partner, they will receive an email with a link that allows them to set their password and enter their name. They can also go to console.springserve.com and click "Forgot your password?" to get a new link. Your account will appear in their dropdown menu when they log into their SpringServe account.

You can log in to Client accounts to see what they will see when they log in to SpringServe. On the Users page, click the icon in the far right column next to the pencil icon.

How do I connect to a new DC supply/demand partner?

The available connections appears in the direct connection tab in the DC section of the header, you can just click connect to send a request. The request will need to be approved on your partner side. For any partner that does not appear on the list, you should talk to your AM if you want to make a new DC connection.


What is the default supply tag type in SpringServe?

When you make a Supply tag, the default type is VPAID both (JS and Flash).

Which version of VAST do SpringServe tags accommodate?

SpringServe will work with demand tags that return both VAST 2.0 and 3.0.

Supply Tags default to VAST 3.0; the version can be set in the Advanced section of the settings tab.

How does SpringServe call demand tags?

SpringServe uses a traditional waterfall to call your demand tags. SpringServe will call a tag at priority 1 first, and if it does not fill, it will move to the next tag down the waterfall. You can have more than one demand tag at the same priority. Tags at the same priority will be called in a round robin fashion, meaning that they will be called with an equal probability (provided the demand tags have the same targeting). Putting tags at the same priority will allow you to do an A/B test and see how different tags perform at the same tier in the waterfall.

Back to top

How does SpringServe define player size?

You can see how we define player size in the targeting tab of a supply or demand tag.

  • X-Small: <250 pixels in width

  • Small: 250-350 pixels in width

  • Medium: 350-500 pixels in width

  • Large: 501-799 pixels in width

  • X-Large: ≥800 pixels in width

How does SpringServe count impressions?

Depending if the tag is VAST only or not, either the player or the VPAID is responsible to fire an impression pixel when the ad starts playing.

What does Optimization do?

Enabling Optimization will turn on auto-optimization for your supply tag based on the selected performance metrics. Optimization uses a proprietary algorithm to periodically re-prioritize the demand tags in your waterfall based on their performance. For more information on optimization, click here.

What is the difference between a blocklist and an allowlist?

An Allowlist will ALLOW requests from only the domains that appear in the list.

A Blocklist will BLOCK all requests from domains on that list.

How does frequency capping work on CTV and In App?

The way that frequency capping works for In-App and CTV is that we first check Device Id to identify a unique user. If Device Id is not populated, then we fall back on IP which we detect to define a unique user. If the device id is invalid, frequency capping will fall back on IP addresses.

Device Id should be at least 15 characters.

How can I view incoming requests?

You can use our Real Time Debugger to view incoming requests. Read more about our troubleshooting tools here: https://wiki.springserve.com/display/SSD/Troubleshooting

How different pacing setting work. I.e. even pacing vs. front loading?

Front Loaded Pacing:

In front-loaded pacing, we pace the first 35% of the time period with the goal of completing the budget at 35% into the period. For example, let’s say we set front loaded budgeting on impressions, with a time period of 1 hour. Then during the first 21 minutes, we would see the budget cap climb to 100% at a generally even pace.

Even Pacing:

With evenly paced budgeting, if a daily budget is set, for example, we allocate a certain amount of requests per hour per day, with the goal of fulfilling the budget by the end of the day. We aim to serve 100% of traffic allotment (budget) within 80% of the day's available time. This ensures that the budget has a chance to be completed, and if traffic was inconsistent, 20% of the remaining time to finish it off. For a normal 24 hour day, this would cause the budget to be open by hour 20 of the day.

How does day parting affect even vs front loaded pacing?

When pacing is enabled on top of day parting, we look at how many hours are in the selected time period for that day and pace based on that time frame, not a 24 hour time frame.

Even Pacing & Day Parting:

If day parting is enabled on 5 hours in a day, we would complete the budget during the start of hour 2 which is 80% into that 5 hour period

Front Loaded Pacing & Day Parting:

If day parting is enabled on 5 hours in a day, we would complete the budget by around hour 2 which is 35% into that 5 hour period.

I set up a budget but my spending is not evenly paced, why?

With daily budgeting, we allocate a certain amount of requests per hour per day, with the goal of fulfilling the budget by the end of the day. If you observed a high volume of requests within a short period of time OR the demand tag was created at a later point in time during the day, we have to re-distribute the number of requests throughout the day in order to hit the budget cap by the end of the day. Once we hit the cap, we reset.


How often is reporting updated?

Data in SpringServe is updated on a by-minute basis. If you make a change, you can see its impact quickly.

Can I set up a recurring report?

Yes; there are two ways to do this.

Use the Scheduled Reports feature and create a new report by clicking the +Scheduled Report button, or run a report in the UI and then click the calendar icon next to the Run Report button.

You can also bookmark the URL when you run a report. In fact, when navigate to the Create Report page of SpringServe you are always taken to the report for Today with dimension of Supply Tag:


What is the difference between detected and declared domain?

Whatever is passed through on the domain/url macro is the Declared Domain. SpringServe also has domain detection, which is initiated when the VPAID initializes. The domain that is detected at this point is the Detected Domain.

Because domain detection occurs upon VPAID initialization, detected domains are only available when there is an opportunity; an opportunity is defined as a VPAID initialization. It is impossible to know what the detected domain is if there hasn't been an opportunity, and therefore, requests are not shown when running a detected domain report.

When creating domain lists for targeting, use declared domain. If you are using detected domain overrides on your supply tags, the detected domain must pass demand tag targeting in order to be passed to demand tags on the waterfall.

Why can't I add detected and/or declared domain as a dimensions in my report?

To run a domain report for periods other than today and yesterday, switch to UTC timezone.

What are unclassified domains and how do I deal with them?

Unclassified domains are those which have low request volume (under 15 requests per hour) but no impressions. These requests do come in and have a chance to be monetized, but at the end of each hour they are compiled into "unclassified" in order for reporting to deal with these long tails. One way to deal with these domains is to talk to your supply partners about the quality of the inventory that they're sending to you. You may want to implement an allowlist in order to reduce the number of long-tail domains. You do have the option of running an hourly domain report at the beginning of the hour before domains have been bucketed into unclassified. This will show you domains that have low volume and no impressions for the last hour.

Note that a domain can be unclassified one hour and not unclassified the next. Consider the case where you have 10 requests and no impressions from lowquality.com in the hour between 12 and 1; it will be unclassified. In the next hour, lowquality.com gets 10 requests and 1 impression; it will appear in your domain report as lowquality.com. The 10 requests from the noon hour remain unclassified. For this reason, it is not necessarily best practice to blocklist domains that get unclassified. They could start out with low volume and no fill and become better performers in the subsequent hours.

What are unknown domains and how are they different from unclassified?

Unknown domains are not the same as unclassified domain. Unknown domains mean we actually did not get a domain in the request. Unclassified domains mean we did get a domain in the request, but those domains have low request volume (under 15 requests per hour) and no impressions.

Can I run a domain report for a period longer than the last 7 days?

Yes. SpringServe keeps domain data for 100 days, so you should be able to pull very large reports with a little patience and by making sure to use UTC as the timezone and the custom timeframe setting. We recommend running domain reports on a regular basis if you foresee the need for historical domain data.

Can I run a report by both domain and country?

Yes; this data is maintained for the last two days. If you foresee needing data beyond this period, create a scheduled report to keep for your archives. Countries are grouped into 6 regions and 38 individual countries.

Why can’t I pull a report from my partner?

Reach out to your partner to make sure that you login is still active in your partner account.


How do I make a mobile tag?

You can make Mobile Web and In-App tags in SpringServe. In the settings tab of your supply tag, select your desired environment. Mobile web and in-app tags are JS VPAID enabled by default. The tag can be made VPAID none by expanding the Advanced section and selecting None in the VPAID Enabled pillbox. Note that you should implement some sort of targeting on your mobile supply tag - we suggest using allowlist, device and geo targeting.

How do I create a secure tag?

SpringServe supply tags are secure by default. Changing https to http in the export tag will make the tag non-secure. Make sure you have secure demand tags attached to the supply tag. You can duplicate a demand tag and change the endpoint URL to be secure - this way you will have a secure and a non-secure copy of the demand tag. Confirm with your demand partner that their ad server supports secure tags.

What is secure targeting and how does that work?

You can target secure URLs for your tag and then this will only allow requests coming from a secure site. The main thing to note is that your player should use “https” when calling our tags, because there will be a mixed media warning if it's calling a non-secure tag on a secure site.

To implement a secure tag, generate a secure (https) Supply Export Tag URL. SpringServe Supply Export Tags are secure by default.

All demand in the waterfall must also be secure. It is very important to note that a secure supply tag needs only secure demand behind it. It can't run non-secure demand. Update your demand tags to be secure by adding “https” to the demand tag endpoint URL. Additionally, for DC, you should let your demand partners know that you need secure demand.

How do I change the status of a tag?

You can change the status of a Supply or Demand tag in one of two ways:

  • In the settings tab, toggle to Active/Inactive in the Status field

  • On the Supply/Demand page, click on the red or green icon in the Active column

Why should I set a custom demand tag timeout?

The default timeout for a demand tag is 20 seconds. If you see that on average a demand tag is responding slower than 20 seconds, you may want to set a custom timeout in order to give more chances to tags down the waterfall. If a demand tag routinely produces the majority of its demand within 14 seconds, you can shave off those last 6 seconds and that might give a chance to a demand tag down in the waterfall to be called. The distribution graphs shown on the supply tag waterfall tab and the demand tag settings tab can help you decide what to set your timeout to.

You may find that a demand tag responds quickly in the waterfall for one supply tag and more slowly for another. In this case, you can duplicate that demand tag and set different custom timeouts and assign the tags to the corresponding supply.

What macros should I use?

See which macros SpringServe supports here: https://wiki.springserve.com/display/SSD/Macros. Default macros for desktop supply tags are Width, Height, Domain, and Cachebuster. If your demand partner requires specific macros to be passed, make sure that they are in both the supply and the demand tag. To add macros to your supply tag, on the Export Tag tab select the macro name and it will appear in the tag URL; export the tag with the added macros and ensure that the player is passing the correct information.

How do I add domain list targeting?

You can apply domain list targeting in two ways:

1) On the Domain List page:

Create your domain list in Targeting → Domain lists. You can add new domains to the text box (comma or newline separated) or you can upload a csv file with your domains. In the Supply tab of your new domain list, you will see all of your supply tags targeting the domain list. To add more supply tags, click +Supply and select "As Allowlist" or "As Blocklist" from the dropdown. The same procedure is used for other objects in additional tabs.

2) On the Targeting tab for your tag:

You can also apply domain list targeting on the Targeting tab of supply and demand tags, you can select allowlist or blocklist and a domain Lists box will pop up. Enter the name or ID of the domain list.

Note that a tag cannot have both a blocklist and an allowlist. However, you can apply as many domain lists as you like to a single tag.


Why do I have zero opportunities when I have requests?

If you have a VPAID tag and you see 0 opportunities it means that the player is not opening our VPAID. Your supply partner may be implementing the tag incorrectly. Ask them to send you an example of the tag as it is implemented in their system. If they send you something that does not have the macros populated with actual values, you may not see any opportunities. It is also possible that there could be a player compatibility issue. Ask your supply partner if they can tell you what player is being used.

Why do I have low opportunities relative to requests with no targeting blocks?

You may be low on your Supply Partner's waterfall. Talk to them to see how you can get to a higher priority. This may entail being put on an allowlist and/or having a request cap.

Why Do I See Impressions but no opportunities?

Opportunity is a metric that counts how many time the VPAID gets opened. CTV and VAST only tags do not involve VPAID initialization therefore there are no opportunities to be counted.

Why aren't my supply tag requests turning into demand tag requests?

Note that there is a difference between Supply Tag Requests and Demand Tag Ad Requests. Usable Requests are defined as requests to the supply tag that pass targeting and IVT. Ad requests are defined as the number of times a demand tag receives a request.

A Supply Tag can only make an ad request to a Demand Tag in its waterfall if that Demand Tag passes all targeting blocks. If your VPAID is enabled you can look at the number of opportunities to see how many request made it through targeting blocks.

Why am I getting no requests to my Direct Connect tags?

If you have connected with a supply partner but are receiving no requests, it could be that the targeting of your DC supply tag is not aligned with the targeting of your supply partner. You should talk to your DC partner to align the targeting. If you removed targeting and are still seeing no requests, it could be because there are targeting conflicts downstream (see following question).

Why is my demand tag not filling?

You may have conflicting targeting with your Demand partners. If you are getting empty VAST responses, this is likely the case. Run a report by demand tag and include Ads in the metrics. The Ads column shows the number of times that the demand tag returns a non-empty VAST response. If this number is low relative to Ad Requests, talk to your demand partners to see what you need to do to get the tag to return a non-empty VAST response.

Why am I seeing ad tag empty?

Make sure your request url is set up correctly and you are sending to your demand partner the macros that they are expecting. Make sure that they do not have targeting blocks.

We recommend you speak with your Demand Partner and review the outgoing requests together to ensure that they aligns with what your partner is expecting in order to return an ad.

Where did my tags go?

The default view on the Supply and Demand pages is Active, so if your tag is inactive, it will not show up in this view. Select Any Status or Inactive from the dropdown list to find your inactive tag.

Why are my supply tag requests getting blocked even though I have no targeting applied on my supply tag?

Check your account wide targeting settings by going Settings > Basic Settings. You may have a targeting applied on domains, apps, IPs, device IDs, or countries

Why are my demand tag requests getting blocked even though I have no targeting applied on my demand tag?

Check targeting settings on your Account, Campaigns, and Demand Partners.

I have multiple demand tags at the same waterfall position but they don’t get equal requests - why is that?

When two tags are at the same position in the waterfall we do a round-robin call to pick a tag (that passes targeting) at random. If you have optimization enabled, the tag that performs the best will be prioritized.

Why do I get detected player size “unknown”?

The reason why detected player size comes in as "unknown" for VAST only tags is because detection happens in the VPAID. If the vpaid never initializes, the size cannot be detected.

Why do I have a lot of errors in reporting?

The errors that you see in reporting could be either Supply Errors or Demand Errors.

A supply error simply means that we went through the entire waterfall and we were not able to get a demand tag that filled.

A demand tag error can mean a few things, specifically that our vpaid calls the demand tag and it doesn’t fill or we call the demand tag and there is an invalid vast or we have trouble loading the demand's vpaid. In order to have a more detailed view of the demand errors, you can create a report on the “VAST error codes” dimension.

I duplicated a high performing demand tag in my waterfall but it isn’t showing the same performance - why would that be?

The reason why a duplicate demand tag would not perform the same if it is in the same waterfall as its clone, is because the demand tags will end up competing for the same requests, therefore the older and more established tag will end up eating up most of the requests.

IVT Troubleshooting

Which IVT vendors are available to use in SpringServe?

SpringServe offers a seamless plug-in for both Pre-bid and Post-Impression detection with various partners. Detection is available on both your supply and demand tags.


  • HUMAN - Desktop, Mobile-web. Could be used for In-app traffic as well. 
  • Protected Media - Available for Desktop, Mobile-web, In-app traffic.  CTV is in beta. Please let your account manager know before activating.
  • SpringServe - Pre-bid based on specific things that SpringServe has come up. Not algorithm based.


  • MOAT
  • IAS
  • Protected Media
  • Forensiq

How do I choose an IVT vendor?

SpringServe suggests sampling at least 20% from each post-imp IVT vendor. You could always change the sample rates to find the results you desire. You could also choose your vendor based on the environment of your tag. For CTV environments you are limited to Protected Media, Forensiq, or HUMAN.

Which IVT vendor should I use based on the environment of my tags?

For Desktop and Mobile web all IVT vendors could be used. For In-app tags we recommend Forensiq and Protected Media and for CTV you could decide between Protected Media, Forensiq, or HUMAN.

What percentage of traffic should I validate?

In the 'Post-Imp Detection Components' section on the supply settings page you could apply 100% of your traffic to one IVT vendor or select a split sample for a total of 100% between any/all vendors. 

How do I select between pre-bid and Post-imp IVT detection?

Pre-bid verification analyzes the request before a bid is even made. It uses previously gathered data alongside real-time machine learning to determine if an ad should even be shown to a user.  Pre-bid IVT filtering is available on both supply and demand tags in SpringServe. Enabling pre-bid on a demand tag protects specific demand sources from IVT, so that you could reduce costs by not running it on your entire supply. Only requests that have been approved by the selected vendors will be passed to the demand tag.

Post-imp verification analyzes the request after the ad has already shown. It allows a user to see where the traffic sources come from and set their own blocklists and allowlists according to the data that is found in reports.

Pre-bid with a small sample of Post-imp provides the verification vendor with useful data to make the algorithm smarter.

How do I run an IVT report?

IVT Metrics show the amount of "invalid" traffic coming through your account measured by different vendors. These metrics are extremely useful for creating blocklists to block domains with a high frequency of "invalid" traffic. 

Even with Pre-Bid IVT Blocking enabled on a supply tag, we highly recommended utilizing post-impression detection along with tag health flags. Pre-Bid IVT blocking takes place at the request level, and is not guaranteed to detect and block all IVT at that stage. Post-Imp IVT data is collected and analyzed at the impression level, and thus will be able to catch IVT traffic that other detection methods will not. 

To see which tags have a high IVT percentage in reporting use the following IVT Metric selections respectively:

Please note that the data depends on when our partners make the data available to us. If you see 'zeros' in reporting, it means thats SpringServe does not have the data yet. Data delays for each IVT partner are as follows:

  • HUMAN - 7 hours
  • Moat - 3 to 9 hours
  • IAS - 12-36 hours
  • Forensiq - 1 full day/24 hours
  • Protected Media - 2 hours

If your tag has a high bot/IVT rate, run a new report with the time range set to Custom spanning 2-3 days, and add the dimension 'Declared Domain' for Desktop and Mobile web, and App Bundle or app name for In-app and CTV campaigns. You could then narrow down the results of the sources with high IVT rates and add them to new or existing blocklists.  This can be a blocklist for the tag specifically, for a supply partner, or a master blocklist for all of your tags, whatever your preference is. Make sure the blocklist is implemented in the tag's targeting. 

One thing to note when using Protected media for IVT detection is that GIVT, SIVT, and Suspicious traffic are all considered IVT in SpringServe so if your IVT rate seems excessively high please take this into account.  If you would like a further breakdown of traffic or have any questions feel free to reach out to product support.

It is highly recommended that you run this bot analysis regularly, not only when your general bot rates are high. 

Could I have access to the IVT vendors dashboard?

This is a special request that will be evaluated on an "as needed" basis. Please reach out to your account manager if you would like more information.

Why are my IVT numbers different across all vendors?

Different vendors have different algorithms to detect IVT so it is normal to see discrepancies between them.

Why are my IVT numbers different between ad servers?

Given that HUMAN is constantly learning and every account in every platform would be giving them different training data, HUMAN actually tailors their blocking algorithm per account and per system. So, it's quite plausible that the rules for another ad server are different than the rules for SpringServe.

Why are pre-bid IVT numbers different than post-imp IVT?

HUMAN uses Post-imp detection data to decide what to block in pre-bid. If Post-imp detection was not initially turned on for some tags or only enabled for a short period of time there is little to no detection data available therefore HUMAN may not have had good enough information to know what to block when pre-bid was enabled.

On this note, we recommend implementing HUMAN post-imp detection on demand tags, because HUMAN pre-bid filtering makes its decisions based on past HUMAN post impression detection data. HUMAN recommends that if a tag has HUMAN pre-bid filtering enabled, its HUMAN post imp detection is 50% or greater.

Why do I still have IVT imps when I have pre-bid blocking enabled?

Pre-bid does not guarantee that IVT impressions will not be served. It uses the information that it has upon request, then makes its assessment. If it passes pre-bid it is possible for it to be determined to be IVT after the impression, when the algorithm has much more information to analyze.

Why is HUMAN prebid stats not available when I add "detected domain" as a dimension?

Blocking requests based on Pre-Bid IVT is only possible if the supply tag has Pre-Bid IVT Blocking enabled in the tag's settings. Pre-Bid blocking happens at the request level.

This data is unavailable for detected domains, because a domain can only be detected if a request is not blocked.

Why don't we see data in our HUMAN reporting console?

Make sure you are clicking on "data sources" at the top of the summary page to toggle accounts.

Why do I not see any IVT targeting blocks on my DC tags?

We do not log targeting and IVT blocks for DC supply and demand tags as it would be too much data to keep track of when there only will be one tag that will receive the final ad request.

To summarize, there are 2 possible scenarios:

1. DC supply tag does not pass HUMAN blocks and does not get included in the parent waterfall.

In this case we are going to log a HUMAN attempt but not a usable request to the tag.

2. DC supply tag passes HUMAN blocks and gets included in the parent waterfall.

In this case we will log both a HUMAN attempt and an usable request.

What is the difference between HUMAN prebid and HUMAN post-imp?

HUMAN pre-bid filtering uses data from HUMANs post imp detection to try to predict if the incoming request is IVT or not. Because HUMAN pre-bid filtering makes its decisions based on past HUMAN post impression detection data, they recommend that if a tag has HUMAN pre-bid filtering enabled, set HUMAN post imp detection with a sample rate of 50% or greater.


How do I get started with the API?

The SpringServe API and SDK will allow your developers to automate reports and make mass updates. Anything you can do in the UI can be done via the API, and its ideal to use the API to do things like mass updates, auto-optimizations, object modifications at scale, etc.

With our API and SDK, you can pull all kinds of reports and have access to object configurations, so you can mix and match the two as you see fit.

On the reporting side, you can pull reports and have them emailed to you before you come in to work, you can schedule periodic reports that you can then summarize in ways you want to see, etc. On the optimization side, you can use some of the data in these reports to make waterfall changes based on performance, make budget changes, modify object configurations (like change MOAT percents, HUMAN percents), etc.

The API documentation is a good starting point for your team on making programmatic changes. Below is the link to our API documentation: https://springserve.atlassian.net/wiki/spaces/SSD/pages/12517384/SpringServe+API+SDK.

What are the rate limits for API requests?

Domain report requests – 3 requests per minute

Non-domain report requests – 10 requests per minute

Other requests – 240 requests per minute

What does a 504 error mean? How do i resolve this?

The 504 Gateway Timeout error is an HTTP status code indicating that server cannot get a response in a timely manner. This means you are likely making a large request, such as a report with many dimensions. To avoid this error, try reducing the size of your query or make your request asynchronously (see below).

What does adding the asynchronous flag do in running reports?

If you run reports with the “async:true” your request will return immediately with the status of the report. You can then keep polling the report for its status until the report becomes available. If your request is really big you might want to run it with the async flag on so that you can keep making other requests in the meanwhile.