Got some help from a friend and figured out that I needed to move the post_meta stuff into the query with meta_query then just set a fallback from there.
<?php
$current_date = date('Ymd');
$page_object = get_queried_object();
$page_id = get_queried_object_id();
// Match the string "123" to the database value a:1:{i:0;s:3:"123";} (serialized array) for ACF
$page_id = '"' . $page_id . '"';
$args = array(
'post_type' => 'ads',
'posts_per_page' => 3,
'orderby' => 'rand',
'meta_query' => array(
array(
'key' => 'start_date',
'value' => $current_date,
'compare' => '<=',
),
array(
'key' => 'end_date',
'value' => $current_date,
'compare' => '>=',
),
array(
'key' => 'display_on_page',
'value' => $page_id,
'compare' => 'LIKE'
)
)
);
$ads = new WP_Query( $args );
if ( $ads->have_posts() ) :
while ( $ads->have_posts() ) : $ads->the_post();
$link = get_field( 'link' );
?>
<div class="col-1-3">
<div class="advertisement footer-ad">
<a href="https://wordpress.stackexchange.com/questions/115841/<?php echo $link; ?>"><?php the_post_thumbnail( 'ads' ); ?></a>
</div>
</div>
<?php
endwhile;
else: ?>
<div class="col-1-3">
<div class="advertisement footer-ad">
<img src="<?php bloginfo( 'template_url' ); ?>/images/ad-listing.jpg" alt="Advertisement">
</div>
</div>
<div class="col-1-3">
<div class="advertisement footer-ad">
<img src="<?php bloginfo( 'template_url' ); ?>/images/ad-listing.jpg" alt="Advertisement">
</div>
</div>
<div class="col-1-3">
<div class="advertisement footer-ad">
<img src="<?php bloginfo( 'template_url' ); ?>/images/ad-listing.jpg" alt="Advertisement">
</div>
</div>
<?php
endif;
?>