diff --git a/api.wordpress.org/public_html/events/1.0/index.php b/api.wordpress.org/public_html/events/1.0/index.php
index b28402f0..4c8fcaca 100644
--- a/api.wordpress.org/public_html/events/1.0/index.php
+++ b/api.wordpress.org/public_html/events/1.0/index.php
@@ -696,13 +696,13 @@ function get_events( $args = array() ) {
 	}
 
 	$wheres = array();
-	if ( !empty( $args['type'] ) && in_array( $args['type'], array( 'meetup', 'wordcamp' ) ) ) {
+	if ( ! empty( $args['type'] ) && in_array( $args['type'], array( 'meetup', 'wordcamp' ) ) ) {
 		$wheres[] = '`type` = %s';
 		$sql_values[] = $args['type'];
 	}
 
 	// If we want nearby events, create a WHERE based on a bounded box of lat/long co-ordinates.
-	if ( !empty( $args['nearby'] ) ) {
+	if ( ! empty( $args['nearby'] ) ) {
 		// Distances in kilometers
 		$event_distances = array(
 			'meetup' => 100,
@@ -711,7 +711,7 @@ function get_events( $args = array() ) {
 		$nearby_where = array();
 
 		foreach ( $event_distances as $type => $distance ) {
-			if ( !empty( $args['type'] ) && $type != $args['type'] ) {
+			if ( ! empty( $args['type'] ) && $type != $args['type'] ) {
 				continue;
 			}
 			$bounded_box = get_bounded_coordinates( $args['nearby']['latitude'], $args['nearby']['longitude'], $distance );
@@ -721,24 +721,39 @@ function get_events( $args = array() ) {
 			$sql_values[] = $bounded_box['latitude']['max'];
 			$sql_values[] = $bounded_box['longitude']['min'];
 			$sql_values[] = $bounded_box['longitude']['max'];
+
+			// Store SQL for local WordCamp query later
+			if ( 'wordcamp' === $type ) {
+				$wc_nearby_where[] = '( `type` = %s AND `latitude` BETWEEN %f AND %f AND `longitude` BETWEEN %f AND %f )';
+				$wc_sql_values[] = $type;
+				$wc_sql_values[] = $bounded_box['latitude']['min'];
+				$wc_sql_values[] = $bounded_box['latitude']['max'];
+				$wc_sql_values[] = $bounded_box['longitude']['min'];
+				$wc_sql_values[] = $bounded_box['longitude']['max'];
+			}
 		}
 		// Build the nearby where as a OR as different event types have different distances.
 		$wheres[] = '(' . implode( ' OR ', $nearby_where ) . ')';
 	}
 
 	// Allow queries for limiting to specific countries.
-	if ( !empty( $args['country'] ) && preg_match( '![a-z]{2}!i', $args['country'] ) ) {
+	if ( ! empty( $args['country'] ) && preg_match( '![a-z]{2}!i', $args['country'] ) ) {
 		$wheres[] = '`country` = %s';
+		$wc_nearby_where[] = '`country` = %s';
 		$sql_values[] = $args['country'];
+		$wc_sql_values[] = $args['country'];
 	}
 
 	// Just show upcoming events
 	$wheres[] = '`date_utc` >= %s';
+	$wc_nearby_where[] = '`date_utc` >= %s';
 	// Dates are in local-time not UTC, so the API output will contain events that have already happened in some parts of the world.
 	// TODO update this when the UTC dates are stored.
-	$sql_values[] = gmdate( 'Y-m-d', time() - ( 24 * 60 * 60 ) );
+	$day_in_seconds = 24 * 60 * 60;
+	$sql_values[] = gmdate( 'Y-m-d', time() - ( $day_in_seconds ) );
+	$wc_sql_values[] = gmdate( 'Y-m-d', time() - ( $day_in_seconds ) );
 
-	// Limit 
+	// Limit
 	if ( isset( $args['number'] ) ) {
 		$sql_limits = 'LIMIT %d';
 		$sql_values[] = $args['number'];
@@ -780,8 +795,57 @@ function get_events( $args = array() ) {
 		);
 	}
 
+	// Run query to find if local WordCamp is occuring within the
+	// next 6 weeks and add it to the events array
+	$wc_nearby_where[] = '`date_utc` <= %s';
+	$wc_sql_values[] = gmdate( 'Y-m-d', time() + ( $day_in_seconds * 42 ) );
+	$wc_sql_where = 'WHERE ' . implode( ' AND ', $wc_nearby_where );
+	$raw_wordcamps = $wpdb->get_results( $wpdb->prepare(
+		"SELECT
+			`type`, `title`, `url`,
+			`meetup`, `meetup_url`,
+			`date_utc`, `date_utc_offset`,
+			`location`, `country`, `latitude`, `longitude`
+		FROM `wporg_events`
+		$wc_sql_where
+		ORDER BY `date_utc` ASC",
+		$wc_sql_values
+	) );
+	$wordcamps = array();
+	foreach ( $raw_wordcamps as $wordcamp ) {
+		$events[] = array(
+			'type'  => $wordcamp->type,
+			'title' => $wordcamp->title,
+			'url'   => $wordcamp->url,
+			'meetup' => $wordcamp->meetup,
+			'meetup_url' => $wordcamp->meetup_url,
+			'date' => $wordcamp->date_utc, // TODO: DB stores a local date, not UTC.
+			'location' => array(
+				'location' => $wordcamp->location,
+				'country' => $wordcamp->country,
+				'latitude' => (float) $wordcamp->latitude,
+				'longitude' => (float) $wordcamp->longitude,
+			),
+		);
+	}
+	// Remove duplicates
+	$events = array_unique( $events, SORT_REGULAR );
+	// If events array is greater than limit, knock off
+	// meetup(s) with later dates.
+	$events = array_reverse( $events );
+	foreach ( $events as $key => $event ) {
+		if ( count( $events ) > $args['number'] ) {
+			if ( 'meetup' === $event['type'] ) {
+				unset( $events[ $key ] );
+			}
+		} else {
+			break;
+		}
+	}
+	$events = array_reverse( $events );
+
 	wp_cache_set( $cache_key, $events, $cache_group, $cache_life );
-	return $events;	
+	return $events;
 }
 
 /**
