Friday’s nonfarm payroll report comes hot on the heels of Wednesday’s Fed rate decision. The monthly figure will round off a fortnight of data, likely to keep policymakers inactive near-term.
As for the US Bureau of Labor Statistics (BLS) jobs report, recent months have seen upside surprises and economists expect another strong print for April.
An economists’ poll predicted payrolls grew 241,000 in April versus 303,000 last month. The unemployment rate is pegged to hold at 3.8% and average hourly earnings are forecast to have risen by 0.3% on the month and 4.0% on the year compared with March's 0.3% and 4.1% prints respectively.
Banks Forecasts
Morgan Stanley: We forecast total nonfarm payrolls to come in at 250,000, while private payrolls are expected to come in at 200,000. The unemployment rate sticks at 3.8%, but it is on the verge of rounding to 3.9%.
HSBC: Over the past year, ongoing increases in labour supply have helped support employment growth. During a moderated discussion on 16 April, Fed Chair Powell described the situation as one where “strong demand for workers has been met by a substantial increase in the workforce, due both to rising labour force participation and a substantial increase in immigration.” The 3- month average change in nonfarm payrolls was 276,000 in March. The 3-month average change in private sector-payrolls was 212,000.
Deutsche Bank: The jobs report on Friday will be the key highlight and our US economists see payrolls gaining 250,000 in April, down from 303,000 in March. They expect the unemployment rate and the hourly earnings growth rate staying at 3.8% and +0.3% m/m, respectively.
BMO Capital Markets: Hiring could have slowed in the month if previously released soft indicators such as S&P Global’s Composite PMI are any guide, but this may have been offset by a decrease in the number of layoffs. At least that’s what the very low level of initial jobless claims recorded at the time the survey was conducted suggests. With these two trends cancelling each other, job creation could have remained strong at 200,000. The household survey may show a smaller gain following an outsized result the prior month, leaving the unemployment rate unchanged at 3.8%.
SocGen: We have projected strong readings, and the reports have substantially exceeded expectations so far this year. Gains are widespread, but they are particularly notable in government, education, and healthcare sectors. These are service-sector jobs that require on-site staffing. Interestingly, we've observed that companies in these seemingly lagging sectors have returned to pre-COVID levels. We initially anticipated this would trigger a slowdown in hiring, but it seems companies are not only returning to pre-COVID levels but also aiming to meet pre-COVID trends. The unemployment rate, as derived from the household survey, has shown slower growth than the non-farm establishment survey, at least until March, when the household sector posted job gains of 498k workers. For April, we expect the rate to remain at 3.8%.
ING: Having added 829,000 jobs in the first three months of the year the pace of hiring is expected to slow in the second quarter. Business surveys point to a substantial slowing, with the ISM employment components having sub-50 readings indicating a contraction and the NFIB small hiring survey suggesting something around the 50,000 mark. However, local government hiring is firm and there is a wariness that official data continues to be stronger than private sector surveys. Hence, we look for non-farm payrolls to slow from 303,000 in March to 210,000 in April and for the unemployment rate to remain at 3.8%
Oxford Economics: Following March's upside surprise, we look for a moderate but still solid pace of growth in nonfarm payrolls of 225,000 in April. We expect the unemployment rate to hold steady at 3.8% and expect another 0.3% m/m increase in average hourly earnings. We look for another 0.9% rise in the employment cost index in Q1, although minimum wage hikes in many states may lend some upside risk to our forecast. We forecast a decline in March job openings of about 1% as demand for workers continues to ease. We look for initial jobless claims to be little changed in the week ended 27 April.
UBS: We expect nonfarm payroll employment expanded 200,000 in April and expect cumulative downward revisions to prior months. For the release of the first quarter Employment Cost Index, we expect headline compensation climbed 1.0% over the three months of the first quarter. The BLS will introduce new seasonal factors that could add to the risks.
Nonfarm Payroll Bank Estimates
/*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; }
}
By Harry Daniels
LiveSquawk News
@HarryDaniels71
02 May 2024 | 18:30 GMT
Friday’s nonfarm payroll report comes hot on the heels of Wednesday’s Fed rate decision. The monthly figure will round off a fortnight of data, likely to keep policymakers inactive near-term.
As for the US Bureau of Labor Statistics (BLS) jobs report, recent months have seen upside surprises and economists expect another strong print for April.
An economists’ poll predicted payrolls grew 241,000 in April versus 303,000 last month. The unemployment rate is pegged to hold at 3.8% and average hourly earnings are forecast to have risen by 0.3% on the month and 4.0% on the year compared with March's 0.3% and 4.1% prints respectively.
Morgan Stanley: We forecast total nonfarm payrolls to come in at 250,000, while private payrolls are expected to come in at 200,000. The unemployment rate sticks at 3.8%, but it is on the verge of rounding to 3.9%.
HSBC: Over the past year, ongoing increases in labour supply have helped support employment growth. During a moderated discussion on 16 April, Fed Chair Powell described the situation as one where “strong demand for workers has been met by a substantial increase in the workforce, due both to rising labour force participation and a substantial increase in immigration.” The 3- month average change in nonfarm payrolls was 276,000 in March. The 3-month average change in private sector-payrolls was 212,000.
Deutsche Bank: The jobs report on Friday will be the key highlight and our US economists see payrolls gaining 250,000 in April, down from 303,000 in March. They expect the unemployment rate and the hourly earnings growth rate staying at 3.8% and +0.3% m/m, respectively.
BMO Capital Markets: Hiring could have slowed in the month if previously released soft indicators such as S&P Global’s Composite PMI are any guide, but this may have been offset by a decrease in the number of layoffs. At least that’s what the very low level of initial jobless claims recorded at the time the survey was conducted suggests. With these two trends cancelling each other, job creation could have remained strong at 200,000. The household survey may show a smaller gain following an outsized result the prior month, leaving the unemployment rate unchanged at 3.8%.
SocGen: We have projected strong readings, and the reports have substantially exceeded expectations so far this year. Gains are widespread, but they are particularly notable in government, education, and healthcare sectors. These are service-sector jobs that require on-site staffing. Interestingly, we've observed that companies in these seemingly lagging sectors have returned to pre-COVID levels. We initially anticipated this would trigger a slowdown in hiring, but it seems companies are not only returning to pre-COVID levels but also aiming to meet pre-COVID trends. The unemployment rate, as derived from the household survey, has shown slower growth than the non-farm establishment survey, at least until March, when the household sector posted job gains of 498k workers. For April, we expect the rate to remain at 3.8%.
ING: Having added 829,000 jobs in the first three months of the year the pace of hiring is expected to slow in the second quarter. Business surveys point to a substantial slowing, with the ISM employment components having sub-50 readings indicating a contraction and the NFIB small hiring survey suggesting something around the 50,000 mark. However, local government hiring is firm and there is a wariness that official data continues to be stronger than private sector surveys. Hence, we look for non-farm payrolls to slow from 303,000 in March to 210,000 in April and for the unemployment rate to remain at 3.8%
Oxford Economics: Following March's upside surprise, we look for a moderate but still solid pace of growth in nonfarm payrolls of 225,000 in April. We expect the unemployment rate to hold steady at 3.8% and expect another 0.3% m/m increase in average hourly earnings. We look for another 0.9% rise in the employment cost index in Q1, although minimum wage hikes in many states may lend some upside risk to our forecast. We forecast a decline in March job openings of about 1% as demand for workers continues to ease. We look for initial jobless claims to be little changed in the week ended 27 April.
UBS: We expect nonfarm payroll employment expanded 200,000 in April and expect cumulative downward revisions to prior months. For the release of the first quarter Employment Cost Index, we expect headline compensation climbed 1.0% over the three months of the first quarter. The BLS will introduce new seasonal factors that could add to the risks.