AdCore “AvailS” Linear Scheduler Flow / Process

Summary

The AdCore Linear Scheduler is designed as an, “always-on” real-time scheduling service, where newly approved insertion orders are evaluated and placed into an existing daily schedule, instead of all approved orders being placed into an empty schedule in a batch process. New orders, order changes, copy changes and other changes that affect placement are all handled the same way, at the time of the change rather than during a batch process. This can help keep operational deadlines short, as no long scheduling batch processes need to be executed.

Avails inventory is defined using simple records describing the number and length of the avails. These records are added to a timetable to define inventory for every station, and may be assigned an inventory type that only similar orders can utilize, e.g. “live events” or “marketing inventory”. Individual programs and groups of programs are also defined and can be ordered.

All order changes that affect placement are evaluated down to a series of clear scheduling components before being handed off to one of many scheduler engines. Breaking order placement down into scheduling components allows a high degree of parallel processing while maintaining spot priorities, ad separation, horizontal / vertical rotation and break / slot preferences. It also allows placing insertion orders for groups of stations by region or DMA, or ordering roadblock spots across multiple stations.

Each scheduler engine can run independently alongside other schedulers using various arbitration and file, table and record locking schemes. A scheduler will work on various tasks, reacting to any schedule component records for placing spots, removing spots for suspended orders, copy changes, etc. When finished it will re-evaluate any unplaced spots to see if they can be placed back in the schedule by shuffling spots to different breaks, grouping spots together, reordering spots in a break, etc., while still respecting order parameters. Manual schedule manipulation is made possible using a GUI.

When an automation log needs to be created for a given day / station, the schedule is evaluated again to fill any partially filled breaks (or optionally, all breaks). Spots that may be designated as  filler are customer bonus spots, marketing spots, PSAs, etc.

After automation events are aired the post logs are evaluated and matched back to the scheduled spot lists and the original order via an automated reconciliation process. After reconciliation any unmatched spots can be matched manually in a GUI, and any scheduled spots without a matching log may be automatically rescheduled if the order parameters allow it, or manually rescheduled if not. Pre-billing records are created based on the results of the matching process.

An operator GUI allows monitoring of the processes and system event messages, API communications, setting global parameters, defining time-based processes, etc.

Avails inventory definition and setup

Avails are defined using simple format and format schedule records. A format record defines a period of time and the avails expected during that period of time. As an example: Format A is two 180-second avails in an hour on station WXXX.

The format schedule records are compiled together to form a listing of avails for each station for a number of days into the future. For example: Repeat format A 24 times for 90 days. This is a simple example, and more complex formats and format schedules can be created and maintained, including longer avails for Program Scheduling.

The avails inventory definition can be enhanced by assigning an inventory type to certain avails. This means that only spots with the same inventory type can be scheduled into the avail. By default inventory has no type, but can be assigned a type down to the level of individual slots. Inventory can also be typed by frequency per hour or percent of inventory and assigned to the first / last slot of a break.

For example you may assign 20 percent of your available inventory between 6am to midnight as marketing inventory. Only orders that are tagged as able to use the marketing inventory will fall into these avails. Another example may be assigning one 15 second avail per hour as PSA inventory and must be specifically ordered as the PSA inventory type to be scheduled there.

Programs can also be defined so that they can be more easily referenced in an order. Programs of similar type or value can be placed into a program group and ordered together.

A table of daypart definitions is used by the scheduler. Each station can have their own daypart definitions and can be valid only for certain days. Globally recognized dayparts can also be defined.

The system will read station definitions including valid start / end dates, station ID changes, time zone and adherence to daylight saving time. This allows for sane scheduling deadlines and future scheduling of new stations. The system also allows for grouping stations together, facilitating regional or national buys.

NOTE: There may already be a database of avails definitions being used for yield management or reporting. This may require some data transformation and/or a modified feature set. For example, if the existing avails data set has no inventory type data, it may be necessary to exclude that feature or implement it in a different way. A deeper understanding of the existing avails, program and daypart data will drive requirements for these features.

Schedule Creation

The schedule creation module is executed periodically to maintain a rolling table of avails for a defined number of days (90 days out into the future for example). This module takes the inventory definition data, including any changes, and updates existing schedule tables. It also creates new empty future schedules as needed and sets a global schedule end date.

For existing daily schedules, any avail definition changes are processed. If an avail is removed from a format schedule (the avail is no longer valid, or the length of the avail is decreased) any spots that have previously been scheduled will be removed automatically and placed into an unplaced spots table. New avails or avails that are increased in length are created or updated in the schedule table and existing scheduled spots remain.

Changes to inventory type definitions are also handled in the create schedule process, including new inventory types or inventory types no longer valid. Slot preferences from the inventory type setup are also evaluated.

Empty schedules for new stations are created according to their start date, and any inventory typing is applied if defined. Stations with an end date are noted so that no schedules will be created for that station after the end date.

Daylight saving time is evaluated by the create schedule module, adding an extra hour to schedules in the fall and subtracting an hour in the spring for stations that follow the time changes as defined in the station setup.

Order Breakdown module

The order breakdown module scans for changes in the order database; approval of new orders, changes to existing orders, order suspensions and other order status changes. Order breakdown then creates small scheduling tasks that are passed on to the scheduler. These small tasks are called component order records and are used by the scheduler to place, move and remove spots in a schedule. Component order records have a suggested placement based on the buy parameters, but the scheduler can change this placement.

The order breakdown module reads the buy parameters and tries to plot an even distribution of spots over the daypart and dates of the buy. For example, consider an order line for 10 spots for a week in the 6a to 10p daypart, M-Su. Order breakdown will not try to frontload the order line by plotting more spots earlier in the week; it will try to plot them evenly throughout the week (called horizontal distribution). It will also plot the spots at different times throughout the week, instead of placing the spot at 8am every day (called vertical distribution). In this example order breakdown also must deal with the three remaining spots after plotting one spot per day over the week. These are placed at random days and times across the week and daypart.

For buys that are more specific such as program buys or a specific inventory type, order breakdown has fewer options for plotting but still creates an even distribution where it can. Each component order record is also assigned a commodity code (or industry / product / business code, where available) so the scheduler can maintain ad separation, for example not placing two domestic car dealerships back-to-back in a break.

Note that the days and times that order breakdown plots are subject to change by the scheduler within the buy parameters.

Order breakdown has the ability to understand 30-hour days, if supported by the order database. Orders can be placed for hours 0000 to 2959 to accommodate overnight dayparts and programs that start before midnight and end after midnight. Order breakdown takes this into account and can plot spots past midnight if ordered, changing the date and time to be absolute.

The order database will likely contain orders and order lines beyond the end of the global schedule end date. Order breakdown puts the portion of these orders beyond this date into a futures table for later scheduling. The schedule end date may be moved further into the future by the schedule creation module, which also evaluates the futures table for spots that can now be scheduled. For example, if the global schedule end date is moved from the end of April to the end of May, spots in the futures table for May are moved from the futures table into the component order table so they can be picked up and placed by the scheduler.

Order breakdown also processes changes to copy rotation groups. When a copy group changes, component order records are created that the scheduler uses to update spot IDs in the schedule. Order breakdown also solves for the correct ratio of copy in the group, e.g. if one creative is to air 70% of the time and a second 30%, the component order records will reflect this ratio.

Order breakdown can also evaluate groups of stations bought together, for fulfilling regional or national buys (if supported by the campaign system).

Order breakdown can solve for roadblock buys if supported by the campaign system. Since this is an extreme edge case it will not be detailed here, but the functionality exists in the system.

If a previously approved order is changed to a suspended order status, meaning all spots for an order or order line must be removed from the schedule, order breakdown creates the component order records that the scheduler will use to remove these spots from all future schedules.

Bonus spot placement records will also be created by order breakdown if enabled, configured and supported by the campaign system. Bonus spots are customer spots plotted beyond the ordered quantity and within the buy parameters. Bonus can be specified as a quantity or percent of ordered spots and may or may not be shown on an invoice (configurable).

Break and slot preferences are taken into account by order breakdown if supported by the campaign system. An order can specify first / last slot, or first / last break in a program and order breakdown will note these in the component order record.

Order breakdown will also check for commercials not received (late copy records) if supported by the campaign system. If a creative is not going to be received or prepared by the scheduling deadline, order breakdown will move any plotted spots into a future date (buy parameters permitting).

The Scheduler module

The scheduler module operates on the results of the order breakdown process. Since there can be more than one scheduler module running there are various checks and arbitration methods that ensure only one scheduler will operate on a single station for a single daily schedule at a time. This arbitration also pauses any schedule modules when the schedule creation process is running. There may also be various file, table and record locking schemes in place.

Each scheduler reads the component order tables for the various types of records: spot placement; rotation change and suspend (remove). If any records exist for dates beyond the global scheduling end date, these records are moved to the futures file. The futures file is also checked for records that can be moved into the component order for processing by the scheduler.

When a new spot needs to be placed into a schedule the closest appropriate break is found in the daily schedule files based on the plotted time from the order breakdown process. If the spot can be placed in the break, the schedule is updated. The scheduler then checks for ad separation based on commodity, spot separation (not placing the same creative in the same break twice) and late copy (creative not received or encoded / prepared in time to air). If these checks succeed, then the scheduler commits the change and moves on to the next component order record for that station / day.

If the spot cannot be placed or if any separation checks fail, the spot is placed into an unplaced table. Any change to a schedule for a given station / day will trigger the scheduler to look for any unplaced spots for that day. If it finds any unplaced spots it will make various attempts to place those spots in the schedule including:

●      Reordering the spots in a break to resolve any ad separation problems

●      Cluster empty slots in a break to the beginning, middle or end of a break in order to fit a longer spot into the break

●      Moving spots to adjacent breaks where permitted by the buy parameters

●      Remove lowest priority spots from the schedule and put them in the unplaced table

●      Move spots to a different day where permitted by the buy parameters

If any of these attempts are successful, the scheduler will again perform ad separation and late copy checks. The daily schedule and the unplaced table are updated to reflect the results.

Suspend / remove and copy change records from the component order table are also processed by the scheduler and similar checks are made for ad separation and late copy.

A user can manually manipulate the spots in a daily schedule by removing, moving and placing spots (from the unplaced spots table). Spots that are manually placed or moved in a schedule are tagged so that the scheduler will not modify the placement.

Once all component order and unplaced records are processed for a station / day, the scheduler will create or update an order index table. This table is a summary representation of scheduled spots and is used later in the process of matching aired spots to scheduled spots.

Fillbreaks module

The fillbreaks module finalizes daily schedules and places spots in any empty slots in a break. It can be configured to fill all empty slots in a schedule or only fill partially filled breaks. It can be run manually or based on a schedule and can be configured to run for a group of stations or a single station. It is meant to be run after any manual manipulation of a daily schedule.

Fillbreaks creates a table of all valid filler spots for any given station / day, length and inventory type. Filler can be customer bonus spots, customer spots used as filler (blind bonus) or only orders that are marked as filler (PSA, marketing, promo, etc.). The daily schedule is filled using spots from this list, respecting ad separation, length and order line parameters. A warning will be logged if no appropriate filler spot can be found for a break.

When the fillbreaks module is finished without warnings the schedules are ready to be sent to the insertion / playback / automation systems.

Matching and rescheduling module

The matching module compares the finalized daily schedules with post logs after the daily schedule has aired. The module can also reschedule missed spots if necessary and possible according to the buy parameters. It also creates billing records that will be handed off to a campaign billing module.

The post logs are loaded into the scheduler database by various mechanisms. The date and time of the last post log for each station is kept in a table so the matching process will not try to match without corresponding logs.

The matching process occurs in two passes. The first pass matches post logs to the order index table (which represents the finalized daily schedules) by oldest dates and highest priorities first. It looks at the actual, earliest and latest time of an order index and finds the closest matching post log to the actual scheduled time. If a match is found the records are updated to reflect the match and the post log cannot be matched to another order index record.

In the second pass the matching process searches other valid past days for unmatched post log records for any unfulfilled order index records (depending on the buy parameters). At the end of the second pass any unmatched order index records can be rescheduled for a future date if the buy parameters permit it. A user can manually match post logs to daily schedules in the GUI for logs that fall outside the buy parameters.

The matching process also creates an indexed breakout of the order database called pre-billing. These pre-billing records link the order to the order index records (and matching post logs). These records can be used for pacing reports throughout a billing period and also serve as the basis for a data feed to an external billing module.

The matching process can also account for a package billing buy type; an order for a set dollar amount where all the ordered spots have a zero rate.

Glossary

Advertising terminology seems to have become somewhat nebulous over time and across different media types and software vendors. Below are some terms that may not be known to all or are specific to our software system.

Ad separation - Using commodity codes to keep competitive ads from running back-to-back, such as two local domestic car dealerships.

Avails - Units of time available for broadcasters to sell to advertisers. The avails database defines the days, times and length of the avails for each station.

Bonus - A customer spot that was not ordered but was aired. These may or may not be shown on the advertising invoice.

Break - A specific avail that multiple spots are scheduled into.

Buy / order - The request from an advertiser to run commercial advertisements in the campaign management system. The details are sometimes referred to as the buy information.

Campaign system - Database of orders from customers including linear advertising, addressable, non-spot, etc. The scheduler would only act on linear spot orders.

Commodity codes - Industry classification codes assigned to advertising buyers. These are used to keep spots from competing buyers running back-to-back. Similar to NAICS codes.

Component orders table - A table of records created by the order breakdown module that represent simple tasks for the scheduling module to process.

Copy / creative - The video commercial advertisement.

Event list - Finalized daily schedules sent to the insertion / playback / automation systems

Futures table - A table of records too far in the future to be placed into a daily schedule. Daily schedules are typically only created out 60 or 90 days (configurable).

Horizontal / Vertical rotation - Plotting spots into avails so that they run evenly throughout a time period, and at different times of day.

Inventory type - A way to tag and isolate avails so that only certain spots can be scheduled into them. For example, a marketing inventory type for avails that customer spots should not be scheduled in.

Late copy - Creative not received or encoded / prepared in time to air on the first scheduled date.

Matching - Reconciling the automation logs with post logs after the daily schedule has aired, to make sure all scheduled spots did air.

Order - The original linear buy information contained in the campaign / traffic database.

Order index table - A summary representation of scheduled spots that is used in the process of matching post logs

Post logs - A list of aired commercial advertisements including air time, date, station and spot ID. Sometimes referred to as post logs.

Prebilling - indexed breakout of orders and order lines from the campaign database. These may be used as the basis of a billing feed for an external system.

Schedule / daily schedule - A list of avails that will run in a station. Schedules are empty until the scheduler places spots into them.

Spot - A single commercial advertisement that is ordered, scheduled or billed.

Spot separation - Ensuring a minimum amount of time before any single commercial runs again e.g., a 60-minute separation means a given spot would not run in the top and bottom of an hour.

Unplaced spots table - Used by the scheduler to store records of spots that could not be placed into a schedule or were removed from the schedule by higher priority spots. Users can manually place unplaced spots into a schedule.