Barclays - - We expect nonfarm payroll employment to have risen 225k in March, slowing from February’s 275k pace, while we forecast private payrolls to have increased 200k. We forecast average hourly earnings rose 0.3% m/m (4.1% y/y), with the workweek remaining steady at 34.3 hours. On the household side, we look for the unemployment rate to tick down to 3.8%.
BMO Capital Markets -- March’s employment situation report is broadly expected to reinforce the ongoing resilience of the labour market which has continued to afford the FOMC sufficient flexibility to push its higher-for-longer agenda. So long as there are no major surprises for headline payrolls growth (i.e. +/-50k), we’re of the mind the AHE/UNR combo will define the bulk of the Treasury market’s response. Because the UNR is now 0.5 pp off the cycle low and it appears there’s been a growing perception the FOMC is taking a more balanced approach to the dual mandate as opposed to solely focusing on inflation – we anticipate market participants will be particularly sensitive to changes in the unemployment rate at this stage in the cycle. The AHE measures will also be topical in light of the high correlation between nominal wage growth and core-services ex-shelter (i.e. supercore) inflation which remains a stickier facet of the consumer prices complex.
BofA Global Research- - We expect nonfarm payrolls to increase by 200k. One of the reasons we are calling for a slowdown in job growth is that payrolls in the month of March have shown a tendency to be weak relative to February in recent years. Average hourly earnings, meanwhile, are likely to rise by 0.3% m/m or 4.1% y/y. On the household survey side, we expect the unemployment rate to remain at 3.9%.
TD Securities - - We look for job growth to have lost further momentum in March following the boomy Jan/Feb gains that came in the 200k-300k range. Household survey noise will keep the UE rate volatile, however, we expect it to stay unchanged at 3.9%. We also look for wage growth to move back to the 0.3% m/m pace —and down 0.2pp to 4.1% y/y—after the ups and downs of the last couple of reports.
Unicredit - - Nonfarm payrolls likely rose 180k in March, less than the 275k rise in February and the past six-month average of 231k. The NFIB survey of small businesses showed a significant slowdown in hiring intentions. Job openings continue to ease and, while layoffs remain low, forward-looking indicators (such as Challenger job cuts and WARN notices) point to a moderate rise in firings ahead. The unemployment rate likely held at 3.9% in March, however, the risks are to the downside as it would not be a big surprise if household employment rebounded after three consecutive months of decline.
Average hourly earnings likely rose 0.3% m/m, taking the y/y rate down to 4.1% from 4.3% in the prior month. The Fed would like to see it in the 3-3.5% range to be consistent with meeting the 2% target over time.
Barclays - - We expect nonfarm payroll employment to have risen 225k in March, slowing from February’s 275k pace, while we forecast private payrolls to have increased 200k. We forecast average hourly earnings rose 0.3% m/m (4.1% y/y), with the workweek remaining steady at 34.3hrs. On the household side, we look for the unemployment rate to tick down to 3.8%.
ING - - With regards to Friday’s jobs report, the falling quits rate coupled with both the manufacturing and service sector ISM employment indices being in contraction territory, plus the ADP private employment report posting a sub-consensus 140k increase (and the seventh consecutive reading between 104-158k) suggests that we must surely see a slowdown in nonfarm payrolls growth. After 333k and 353k prints for December and January, respectively, economists are pencilling in a 200k forecast but given the propensity for official data to come in far hotter than survey and anecdotal evidence, confidence is low in this prediction.
Morgan Stanley - - Payrolls have reaccelerated since last fall, rising 265k per month on average over the past three months after a 212k per month pace in Q423 and 213k in Q323. We expect continued strength in March - a 245k increase in headline payrolls and 200k in private payrolls. The pace slows slightly from recent months as we move out of the unusually warm winter.
We do not see particular risk from seasonal factors in March. By industry, payrolls tend to rise in March, mostly reflecting leisure & hospitality and construction. Retail is the major exception—unwinding strength from earlier in the winter. For private payrolls, the seasonal factors subtracted a little less in the past two years than they had pre-pandemic, but the seasonal adjustment has been relatively stable in the last three years. We do not expect a large distortion from seasonal factors.
Deutsche Bank - - Regarding Friday's employment report, our headline (200k forecast vs. 275k previously) and private (175k vs. 223k) payroll forecasts importantly assume another one-tenth uptick in hours worked to 34.4hrs, as well as a +0.2% increase in average hourly earnings (vs. +0.1% previously). The upshot of our establishment survey forecasts is that compensation growth from the payroll proxy would rise by roughly 40bps in year-over-year terms to 5.7%. For Q1, the payroll proxy would imply nominal compensation growth of roughly 5.2% annualized - a slight step-up relative to Q4 of last year (5.0%). Though we expect the unemployment rate to slip a tenth to 3.8%, the risk is that it rounds up to 3.9%.
CA CIB - - We expect nonfarm payrolls to rise by 225k in March, a still solid pace overall though down compared to 275k in February. Gains in this range would also see the three-month moving average tick lower after rising for each of the past three months, resuming a trend of gradual cooling. n The last couple of months have seen some notable upside surprises for NFP, though other employment metrics have not been as robust, including a household survey that has shown outright declines in employment in a number of recent months. As such, despite the strong recent NFP prints, we continue to believe that the labour market is cooling, albeit in a gradual and relatively orderly fashion thus far.
/*jshint esversion: 6 */
var socket;
var assigned_server = 3001;
var distributor_server = 3010;
var publisher_channel = '';
var broadcaster_channel = '';
var remote_ip = '';
var session_info = {};
var logging_interval;
var logging_interval_time = 120000;
var socket_emits = 0;
var session_start_time;
var reconnectionDelayGrowFactor = 1.2;
var reconnection_delay = 1000;
var playing = false;
var connected_to_assigned = false;
var socket_close_timeout;
var player_disconnected_annoucement_play_delay = 1500;
var player_disconnected_annoucement_play_timeout = null;
self.onmessage = function (msg) {
switch(msg.data.action) {
case 'Reactivate': reactivate(); break;
case 'ConnectDistributor': connect_to_distributor(msg); break;
case 'SessionStaticInfo': session_static_info(msg); break;
case 'SessionInfo': update_session_info(msg.data); break;
case 'PauseLogging': clearTimeout(logging_interval); break;
case 'RestartLogging': postMessage({action: 'RequestSessionStaticInfo' }); break;
case 'JoinPublisherChannel': join_publisher_channel(msg.data); break;
case 'JoinPlayerChannel': join_player_channel(msg.data); break;
case 'CheckChannelStatus': check_channel_status(msg.data); break;
case 'PlayerLogResponse': player_log_response(msg.data); break;
case 'CloseSocket': close_socket(); break;
case 'RequestMessageSearch': request_message_search(msg.data); break;
case 'RequestMoreMessages': request_more_messages(msg.data); break;
case 'PlayerDisconnectedAnnoucementTimeoutStart': player_disconnected_annoucement_timeout_start(); break;
case 'PlayerDisconnectedAnnoucementTimeoutClear': player_disconnected_annoucement_timeout_clear(); break;
}
};
function player_disconnected_annoucement_timeout_clear() {
clearTimeout(player_disconnected_annoucement_play_timeout);
player_disconnected_annoucement_play_timeout = null;
}
function player_disconnected_annoucement_timeout_start() {
player_disconnected_annoucement_play_timeout = setTimeout(function() { send_play_disconnect_annoucement(); }, player_disconnected_annoucement_play_delay );
}
function send_play_disconnect_annoucement() {
postMessage({action: "PlayDisconnectAnnoucement"});
}
function reactivate() {
playing = false;
connect_to_assigned_server();
}
function player_log_response(data) {
var data_array = {};
data_array.type = 'PlayerLogResponse';
data_array.respond_to_socket_final = data.respond_to_socket_final;
data_array.respond_to_socket = data.respond_to_socket;
data_array.player_socket_id = data.player_socket_id;
data_array.logs = data.logs;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function request_message_search(data) {
var data_array = {};
data_array.type = 'request_message_search';
data_array.publisher_channel = data.publisher_channel;
data_array.search_term = data.search_term;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function request_more_messages(data) {
var data_array = {};
data_array.type = 'request_more_messages';
data_array.publisher_channel = data.publisher_channel;
data_array.last_record_id = data.last_record_id;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function check_channel_status(data) {
var data_array = {};
data_array.type = 'check_channel_status';
data_array.app_name = data.app_name;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1 && connected_to_assigned) { socket.send(msg_string); }
else { setTimeout(function() { check_channel_status(data); },500); }
}
function check_channel_status_response(data) {
postMessage({ action: 'CheckChannelStatusReponse', stream_status: data.stream_status.status, onair: data.stream_status.onair, connected: data.stream_status.connected });
}
function join_publisher_channel(data) {
var data_array = {};
data_array.type = 'join_publisher_channel';
if (typeof data.api_key !== 'undefined') { data_array.api_key = data.api_key; }
else {
data_array.publisher_channel = data.publisher_channel;
data_array.username = data.username;
data_array.subscriber_group = data.subscriber_group;
data_array.display_name = data.display_name;
data_array.single_sign_on = data.single_sign_on;
data_array.remote_ip = data.remote_ip;
data_array.http_referrer = data.http_referrer;
data_array.current_page = data.current_page;
data_array.php_session_id = data.php_session_id;
data_array.from_react = data.from_react;
}
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
postMessage({action: 'PublisherChannelJoined' });
}
function session_static_info(msg) {
set_static_session_info(msg.data);
start_log();
}
function connect_to_distributor(msg) {
publisher_channel = msg.data.publisher_channel;
remote_ip = msg.data.remote_ip;
socket = new WebSocket("wss://ws.livesquawk.com/ws"+distributor_server);
socket.onopen = function(event) { request_server_assignment(); };
socket.onmessage = function(event) {
var msg_string = event.data.toString();
var data = JSON.parse(msg_string);
switch(data.type) {
case 'server_assignment_response': server_assignment_response(data); break;
}
};
}
function session_info_interval() {
postMessage({action: 'RequestSessionInfo' });
logging_interval = setTimeout(session_info_interval,logging_interval_time);
}
function server_assignment_response(data) {
assigned_server = data.selected_server;
socket.close();
connect_to_assigned_server();
}
function request_server_assignment() {
var data_array = {};
data_array.type = 'request_server_assignment';
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function connect_to_assigned_server() {
socket = new WebSocket("wss://ws.livesquawk.com/ws"+assigned_server);
socket.onopen = function(event) {
postMessage({ action: 'VisibleConsole',console_string: "Connected to server "+assigned_server });
console.log("Connected to server "+assigned_server);
postMessage({ action: 'ConnectedToAssigned' });
connected_to_assigned = true;
if (playing) {
postMessage({ action: 'RejoinPlayerChannel' });
}
};
socket.onmessage = function(event) {
var msg_string = event.data.toString();
var data = JSON.parse(msg_string);
if (data.type != 'server_ping') { /* console.log(data.type); */ }
switch(data.type) {
case 'reconnect': postMessage({ action: 'VisibleConsole',console_string: "Reconnected" }); break;
case 'reload': postMessage({ action: 'Reload' }); break;
case 'start_log_response': start_log_response(data); break;
case 'application_refresh_start': application_refresh_start(data); break;
case 'application_refresh_stop': application_refresh_stop(data); break;
case 'player_log_request':
case 'check_channel_status_response': check_channel_status_response(data); break;
case 'PlayerLogRequest':
case 'new_tweet':
case 'new_latest_news':
case 'delete_report':
case 'add_report':
case 'add_ref_doc':
case 'calendar_change':
case 'calendar_insert':
case 'calendar_delete':
case 'new_note':
case 'AppStart':
case 'AppStop':
case 'BroadcasterStarted':
case 'BroadcasterStopped':
case 'added_cme_report':
case 'updated_cme_report':
case 'added_cme_commentary':
case 'updated_cme_commentary':
case 'server_assignment_response':
case 'initial_messages':
case 'message_categories':
case 'more_messages':
case 'matched_messages':
pass_straight_to_post_message(data);
break;
case 'output':
case 'server_ping':
case 'reconnect':
case 'disconnect':
break;
}
};
socket.onerror = function(event) {
postMessage({ action: 'VisibleConsole',console_string: "LS Socket Error" + event.type });
console.log(event);
postMessage({ action: 'LSSocketConnectionError' });
};
socket.onclose = function(event) {
console.log('Socket is closed. Reconnect will be attempted in 1 second.', event.reason);
socket_close_timeout = setTimeout(connect_to_assigned_server, reconnection_delay);
reconnection_delay = reconnection_delay*reconnectionDelayGrowFactor;
connected_to_assigned = false;
};
}
function close_socket() {
clearTimeout(socket_close_timeout);
socket_close_timeout = null;
socket.onclose = function(event) {};
socket.onmessage = function(event) {};
socket.onerror = function(event) {};
socket.close(1000);
console.log('Socket Closed');
}
function pass_straight_to_post_message(data) {
data.action = data.type;
postMessage(data);
}
function join_player_channel(data) {
var data_array = {};
data_array.type = 'join_player_channel';
data_array.player_channel = data.player_channel;
data_array.remote_ip = data.remote_ip;
data_array.username = data.username;
data_array.app_name = data.app_name;
data_array.onair_status = data.onair_status;
data_array.http_referrer = data.http_referrer;
data_array.current_page = data.current_page;
data_array.php_session_id = data.php_session_id;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
postMessage({action: 'PlayerChannelJoined' });
playing = true;
}
function start_log_response(data) {
session_info.session_id = data.log_record_id;
session_info_interval();
}
function application_refresh_start(data) {
if (data.app_name == session_info.application_name) { postMessage({action: 'ApplicationRefreshStart' }); }
}
function application_refresh_stop(data) {
if (data.app_name == session_info.application_name) { postMessage({action: 'ApplicationRefreshStop' }); }
}
function set_static_session_info(data) {
session_info.browser_codename = data.browser_codename;
session_info.browser_name = data.browser_name;
session_info.user_agent = data.user_agent;
session_info.browser_version = data.browser_version;
session_info.cookies_enabled = data.cookies_enabled;
session_info.platform = data.platform;
session_info.player_version = data.player_version;
session_info.stream = data.stream;
session_info.connection_protocol = data.protocol;
session_info.delay_target = data.delay_target;
session_info.session_email = data.session_email;
session_info.remote_ip = data.remote_ip;
session_info.php_session_id = data.php_session_id;
session_info.application_name = data.application_name;
session_info.http_referrer = data.http_referrer;
}
function start_log() {
var session_start_date = new Date();
session_start_time = session_start_date.getTime();
var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var session_start_date_string = session_start_date.getDate() + " " + months[session_start_date.getMonth()] + " " + session_start_date.getFullYear();
var data_array = {};
data_array.type = 'webrtc_start_log';
data_array.remote_ip = session_info.remote_ip;
data_array.username = session_info.session_email;
data_array.php_session_id = session_info.php_session_id;
data_array.webrtc_protocol = '';
data_array.session_start_time = (session_start_time/1000).toFixed(0);
data_array.stream_name = session_info.stream;
data_array.session_start_date = session_start_date_string;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function update_session_info(data) {
var data_array = {};
var msg_string = '';
var current_date = new Date();
var current_time = current_date.getTime();
session_info.protocol = data.protocol;
session_info.curr_delay = (data.effective_latency / 1000).toFixed(2);
session_info.session_length = current_time - session_start_time;
session_info.ping_time = data.ping_time;
session_info.jitter = data.jitter;
session_info.packet_loss = data.packet_loss;
session_info.effective_latency = data.effective_latency;
session_info.mean_opinion_score = data.mean_opinion_score;
session_info.restarts = data.restarts;
if (socket_emits == 0) {
data_array = {};
data_array.type = 'webrtc_log_data_full';
data_array.connection_protocol = session_info.protocol;
data_array.threshold = 0;
data_array.curr_delay = session_info.curr_delay;
data_array.session_length = session_info.session_length;
data_array.date = current_time;
data_array.browser_codename = session_info.browser_codename;
data_array.browser_name = session_info.browser_name;
data_array.user_agent = session_info.user_agent;
data_array.browser_version = session_info.browser_version;
data_array.cookies_enabled = session_info.cookies_enabled;
data_array.platform = session_info.platform;
data_array.player_version = session_info.player_version;
data_array.stream = session_info.stream;
data_array.restarts = session_info.restarts;
data_array.delay_target = 0;
data_array.op_sys = '';
data_array.flash_version = '';
data_array.remote_ip = session_info.remote_ip;
data_array.http_referrer = session_info.http_referrer;
data_array.php_session_id = session_info.php_session_id;
data_array.user_email = session_info.session_email;
data_array.webrtc_protocol = session_info.protocol;
data_array.ping_time = session_info.ping_time;
data_array.jitter = session_info.jitter;
data_array.packet_loss = session_info.packet_loss;
data_array.effective_latency = session_info.effective_latency;
data_array.mean_opinion_score = session_info.mean_opinion_score;
data_array.session_id = session_info.session_id;
msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
else {
data_array = {};
data_array.type = 'webrtc_log_data';
data_array.session_id = session_info.session_id;
data_array.php_session_id = session_info.php_session_id;
data_array.connection_protocol = session_info.protocol;
data_array.restarts = session_info.restarts;
data_array.threshold = 0;
data_array.curr_delay = session_info.curr_delay;
data_array.session_length = session_info.session_length;
data_array.date = current_time;
data_array.webrtc_protocol = session_info.protocol;
data_array.ping_time = session_info.ping_time;
data_array.jitter = session_info.jitter;
data_array.packet_loss = session_info.packet_loss;
data_array.effective_latency = session_info.effective_latency;
data_array.mean_opinion_score = session_info.mean_opinion_score;
data_array.stream = session_info.stream;
msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
socket_emits++;
if (socket_emits == 100) { socket_emits = 0; }
}
Barclays - - We expect nonfarm payroll employment to have risen 225k in March, slowing from February’s 275k pace, while we forecast private payrolls to have increased 200k. We forecast average hourly earnings rose 0.3% m/m (4.1% y/y), with the workweek remaining steady at 34.3 hours. On the household side, we look for the unemployment rate to tick down to 3.8%.
BMO Capital Markets -- March’s employment situation report is broadly expected to reinforce the ongoing resilience of the labour market which has continued to afford the FOMC sufficient flexibility to push its higher-for-longer agenda. So long as there are no major surprises for headline payrolls growth (i.e. +/-50k), we’re of the mind the AHE/UNR combo will define the bulk of the Treasury market’s response. Because the UNR is now 0.5 pp off the cycle low and it appears there’s been a growing perception the FOMC is taking a more balanced approach to the dual mandate as opposed to solely focusing on inflation – we anticipate market participants will be particularly sensitive to changes in the unemployment rate at this stage in the cycle. The AHE measures will also be topical in light of the high correlation between nominal wage growth and core-services ex-shelter (i.e. supercore) inflation which remains a stickier facet of the consumer prices complex.
BofA Global Research - - We expect nonfarm payrolls to increase by 200k. One of the reasons we are calling for a slowdown in job growth is that payrolls in the month of March have shown a tendency to be weak relative to February in recent years. Average hourly earnings, meanwhile, are likely to rise by 0.3% m/m or 4.1% y/y. On the household survey side, we expect the unemployment rate to remain at 3.9%.
TD Securities - - We look for job growth to have lost further momentum in March following the boomy Jan/Feb gains that came in the 200k-300k range. Household survey noise will keep the UE rate volatile, however, we expect it to stay unchanged at 3.9%. We also look for wage growth to move back to the 0.3% m/m pace —and down 0.2pp to 4.1% y/y—after the ups and downs of the last couple of reports.
Unicredit - - Nonfarm payrolls likely rose 180k in March, less than the 275k rise in February and the past six-month average of 231k. The NFIB survey of small businesses showed a significant slowdown in hiring intentions. Job openings continue to ease and, while layoffs remain low, forward-looking indicators (such as Challenger job cuts and WARN notices) point to a moderate rise in firings ahead. The unemployment rate likely held at 3.9% in March, however, the risks are to the downside as it would not be a big surprise if household employment rebounded after three consecutive months of decline.
Average hourly earnings likely rose 0.3% m/m, taking the y/y rate down to 4.1% from 4.3% in the prior month. The Fed would like to see it in the 3-3.5% range to be consistent with meeting the 2% target over time.
Barclays - - We expect nonfarm payroll employment to have risen 225k in March, slowing from February’s 275k pace, while we forecast private payrolls to have increased 200k. We forecast average hourly earnings rose 0.3% m/m (4.1% y/y), with the workweek remaining steady at 34.3hrs. On the household side, we look for the unemployment rate to tick down to 3.8%.
ING - - With regards to Friday’s jobs report, the falling quits rate coupled with both the manufacturing and service sector ISM employment indices being in contraction territory, plus the ADP private employment report posting a sub-consensus 140k increase (and the seventh consecutive reading between 104-158k) suggests that we must surely see a slowdown in nonfarm payrolls growth. After 333k and 353k prints for December and January, respectively, economists are pencilling in a 200k forecast but given the propensity for official data to come in far hotter than survey and anecdotal evidence, confidence is low in this prediction.
Morgan Stanley - - Payrolls have reaccelerated since last fall, rising 265k per month on average over the past three months after a 212k per month pace in Q423 and 213k in Q323. We expect continued strength in March - a 245k increase in headline payrolls and 200k in private payrolls. The pace slows slightly from recent months as we move out of the unusually warm winter.
We do not see particular risk from seasonal factors in March. By industry, payrolls tend to rise in March, mostly reflecting leisure & hospitality and construction. Retail is the major exception—unwinding strength from earlier in the winter. For private payrolls, the seasonal factors subtracted a little less in the past two years than they had pre-pandemic, but the seasonal adjustment has been relatively stable in the last three years. We do not expect a large distortion from seasonal factors.
Deutsche Bank - - Regarding Friday's employment report, our headline (200k forecast vs. 275k previously) and private (175k vs. 223k) payroll forecasts importantly assume another one-tenth uptick in hours worked to 34.4hrs, as well as a +0.2% increase in average hourly earnings (vs. +0.1% previously). The upshot of our establishment survey forecasts is that compensation growth from the payroll proxy would rise by roughly 40bps in year-over-year terms to 5.7%. For Q1, the payroll proxy would imply nominal compensation growth of roughly 5.2% annualized - a slight step-up relative to Q4 of last year (5.0%). Though we expect the unemployment rate to slip a tenth to 3.8%, the risk is that it rounds up to 3.9%.
CA CIB - - We expect nonfarm payrolls to rise by 225k in March, a still solid pace overall though down compared to 275k in February. Gains in this range would also see the three-month moving average tick lower after rising for each of the past three months, resuming a trend of gradual cooling. n The last couple of months have seen some notable upside surprises for NFP, though other employment metrics have not been as robust, including a household survey that has shown outright declines in employment in a number of recent months. As such, despite the strong recent NFP prints, we continue to believe that the labour market is cooling, albeit in a gradual and relatively orderly fashion thus far.