Corporate Results Monitor

FNArena's All-Year Round Australian Corporate Results Monitor.

Currently monitoring March-July 2026.

Figures shown as at 23 May 2026

FNArena subscribers receive the most current information. Please login with your account details.

TOTAL STOCKS:

40

Beats

15

In Line

8

Misses

17

Total Rating Upgrades:

15

Total Rating Downgrades:

6

Total target price movement in aggregate:

-1.38%

Average individual target price change:

-5.52%

Beat/Miss Ratio:

0.88

Previous Corporate Results Updates

Company Result Upgrades Downgrades Buy/
Hold/Sell
Prev Target New Target Brokers Commentary
AAI - Alcoa MISS 1 0 2/1/0 101.00 106.00 3

Alcoa’s March-quarter operating earnings missed expectations, largely due to inventory repositioning within the US and logistical issues, which weighed on shipments despite broadly in-line production. Ord Minnett views these shortfalls as timing-related, with underlying demand remaining strong and supply constrained by smelter shutdowns in the Middle East, creating potential upside for Alcoa. Higher diesel costs are expected to pressure the company's Western Australian bauxite operations, particularly in 2H 2026. Citi retains a Buy on the stock due to its "structurally bullish" outlook on aluminium, irrespective of the Middle East, as well as viewing Bill Oplinger as a "transformational CEO". UBS sits on Neutral. Ord Minnett has upgraded to Accumulate from Hold.

ALQ - ALS Ltd BEAT 0 0 5/0/0 25.76 25.38 5

ALS Ltd announced slightly better than expected 2H26 results with Morgans noting Commodities was the stand out with Life Sciences the "laggard", albeit that was no major surprise. Macquarie underscored sample flows picked up in November and December and then stayed at that level, while any increase now would have positive implications for guidance. Management lifted the outlook for FY27 minerals organic revenue growth to 13%-15%. Margins are flagged to expand in 2H27, while Life Sciences was guided to mid-single digit organic revenue growth for FY27. Five Buy-equivalent ratings.

AMC - Amcor MISS 0 0 4/1/0 72.78 65.08 5

Amcor's March quarter earnings were largely in line, but FY26 guidance has been downgraded. Judging from the share price response, the market was fearing a lot worse. There remains potential for cost-of-living impacts on demand although Macquarie assesses the company's consumer staples end markets remain defensive. Ord Minnett believes near-term expectations have been sufficiently cleared and valuation support is becoming more evident. Thus far, four Buy ratings.

ANZ - ANZ Bank IN LINE 3 0 2/3/1 35.25 35.18 6

ANZ Bank's FY26 financials are broadly in line, with here and there minor misses. Citi highlights net interest margin of 1.53% was -3 basis points below expectations, largely a function of market drag. New Zealand was also a drag because of FX translation. Costs were better than expected, supported by FX, and guidance has improved with the bank guiding to costs being down -5% on the FY25 baseline. Bad debts were largely in line with expectations. Strategy components across FY26 and FY27 appear on track. Morgans notes asset quality remains resilient, while capital levels are strong, allowing the bank to neutralise its dividend reinvestment plan and reduce dilution. Many point out the valuation is cheaper than for local peers. Following three upgrades, two Buy ratings are outnumbered by three on Neutral/Hold, plus one soft Sell.

ALL - Aristocrat Leisure IN LINE 0 0 7/0/0 63.67 63.33 7

Morgans sums up the earnings season well, where market expectations drive much of the response to results. In Aristocrat Leisure's case, in-line with consensus was good enough to prompt a 13% rally in the share price. Macquarie notes North American gaming has momentum and Product Madness outperformance can continue. Management flagged net adds to be at the top end of guidance, 4000-5000 units for FY26. For Ord Minnett, the main issue is whether meaningful margin expansion is achievable. Management has signalled a target to remove $100m in costs in FY27. Macquarie expects 10%-15% earnings growth over the medium term with benefits from ongoing buybacks. As the stock is universally seen as undervalued, seven Buy-equivalent ratings.

ARX - Aroa Biosurgery BEAT 0 0 2/0/0 0.82 0.95 2

Aroa Biosurgery FY26 revenue and normalised earnings both exceeded guidance. Bell Potter (Buy) notes growth was driven by the company's flagship wound care product range Myriad, which delivered standout performance and accelerated US momentum. Myriad grew 52% on a constant currency basis versus FY25. Margins benefited from operating leverage and favourable FX. A higher assumed risk-free rate to 10.8% results in a slight downgrade to Morgans' price target price to $0.77 from $0.79, but this Buy rating remains equally in place. Bell Potter's target shifted to $1.12 from $0.85.

AAC - Australian Agricultural Co BEAT 0 0 1/0/0 1.95 1.85 1

Australian Agricultural Co delivered FY26 operating EBITDA up 23% and ahead of Bell Potter's forecasts. Revenue of $422.1m was up 9%, with the broker noting the record operating performance was understated because of the inclusion of -$9m in flood-related costs. The company has indicated global beef demand should remain strong while acknowledging inflationary pressures in energy, transport and production.

AVH - Avita Medical IN LINE 0 0 1/1/0 1.28 1.28 2

Morgans views Avita Medical's 1Q2026 result as a step in the right direction, with solid sequential revenue growth and reaffirmed FY26 guidance. Bell Potter noted revenue growth up 4% y/y and an earnings (EBIT) loss of -$8.8m against a prior loss of -$15.6m for the comparable period. Revenue of $19.3m over the quarter was highlighted as nearing a record high with most generated from 175 specialist burn units and L1 trauma centres. FY26 revenue guidance is considered achievable. Management also guided to a material reduction in cash burn in the second quarter, which should meaningfully narrow the funding deficit. One Speculative Buy and one Speculative Hold rating.

BOQ - Bank of Queensland MISS 1 4 1/3/2 6.86 6.55 6

Bank of Queensland's FY26 missed market consensus by some -3%. Margins softened in the half but are expected to improve in 2H26, supported by funding, mix and hedging tailwinds. Morgans highlights a stronger capital position, enabling higher dividends and potential capital returns, which may appeal to income-focused investors. Morgans upgrades to Accumulate from Hold. In contrast, Macquarie downgrades to Underperform from Neutral, pointing to downside risks from rising provisions and ongoing loss of market share. Citi downgrades to Neutral from Buy, as does UBS. Morgan Stanley sticks with a Neutral-equivalent view expecting a return to growth in home lending in FY27. Ord Minnett had downgraded to Lighten before the result and hasn't bothered to update post the result.

CSC - Capstone Copper BEAT 0 0 4/0/0 15.56 16.67 4

Capstone Copper announced 1Q2026 earnings (EBITDA) of US$329m, a record and 16% above consensus, boosted by higher realised copper prices of US$5.92/lb. Alas, sulphuric acid costs are a major headwind for margins as prices have lifted to around US$420/t in Chile from US$180/t in January. Sulphuric acid is a significant input for Capstone's cathode production at Mantoverde and Mantos Blancos. Citi observes 2026 guidance remains unchanged. Key upcoming catalysts are seen as progress at the Mantoverde Optimised (upgrade and expansion project) and permitting and study milestones at Mantos Blancos (also in Chile). Four out of four Buy ratings.

CVL - Civmec BEAT 0 0 1/0/0 1.95 1.90 1

Civmec announced net profit after tax up 45.2% for 3Q26 on revenue uplift of 54.1% y/y. Bell Potter notes against earnings forecasts, revenue of $232.2m in 4Q26 (versus $244.2m in 3Q) seems very achievable. Earnings (EBITDA) margins were slightly better than expected, resulting in a slight uplift in FY26 earnings (EBITDA) margin forecasts. Notably tendering activity remains strong across most divisions. The order book fell slightly to $1.3bn at March quarter end from $1.35bn at the end of the Dec quarter. So far, one Buy rating.

DNL - Dyno Nobel BEAT 0 0 1/4/0 3.50 3.64 6

A robust beat is how UBS described Dyno Nobel's interim earnings (EBIT) exceeding consensus expectations by 18%. Explosives advanced 28% y/y, boosted by APAC strength. Macquarie highlighted weakness for Latam and EMEA, lower than anticipated, with no change to FY26 earnings guidance. Positively, the transformation program is on track for an earnings (EBIT) target of $600m at the end of FY26. The supply of ammonium nitrate is also secure, universally seen as another positive. The sale of Phosphate Hill to Mayfair is due to complete by the end of June. Despite the beat, analysts caution on the valuation at current levels resulting in four Hold-equivalent ratings and one Buy.

EBR - EBR Systems MISS 0 0 2/0/0 2.69 2.24 2

EBR Systems' 2025 financial performance proved broadly in-line with forecasts but gross margins are expected to decline in 2026 to reflect current inventory costs before rising again in 2027. Both Bell Potter and Morgans retain a positive view, but reduced forecasts weigh down on respective price targets. Morgans does highlight EBR Systems has made a strong start to 2026 amid favourable reimbursement and growing physician engagement. Two Buys.

ELD - Elders MISS 0 0 4/1/0 8.38 7.13 5

An unexpectedly strong rise in costs led to Elders' 1H26 earnings (EBIT) missing forecasts by -6%-8%. Add El Nino uncertainty and the share price received severe punishment. Morgans observed the results operationally were robust with sales rising 32% and underling earnings up 33%. Real estate earnings were flat while rural services rose 35% and crop protection increased by 57%. Management offered no formal FY26 guidance but Delta is expected to make a positive contribution. Macquarie observed there has been a robust start to the winter season across Victoria, South Australia and Western Australia with ongoing tailwinds in agencies such as elevated livestock pricing. Four Buy-equivalent ratings and one Hold rating.

FPR - FleetPartners Group BEAT 0 0 4/0/0 3.45 3.48 4

Morgan Stanley notes FleetPartners Group's first half results were ahead across the board, with the new business writing (NBW) trajectory improving and "marginal growth in NBW" reiterated for FY26. A second half skew now looks more achievable with strong exit momentum. The April pipeline is the largest in last 12 months and 27% above the first half monthly average. Thus far, one Buy-equivalent rating.

GTK - Gentrack Group MISS 0 0 1/2/0 4.14 4.17 3

Gentrack's first half result was largely in line with expectations following the recent market update. Bell Potter explains earnings were impacted by a decline in projects wins, as pre-reported. Group revenue slipped by -2% y/y and recurring revenues grew 11.6% while non-recurring revenue fell -30%. Margins came under pressure, falling by around -440bps y/y to 7.2% as the workforce was put on hold as execution on the pipeline was delayed. Management reiterated FY26 revenue and EBITDA guidance. Morgan Stanley points out the contribution from the newly-acquired Factor added a further small negative to sales and earnings, albeit this was skewed to a non-recurring revenue and should become a smaller part of the base going forward. One Buy and two Hold-equivalent ratings.

GNC - GrainCorp IN LINE 0 1 1/3/0 6.89 6.17 4

In keeping with market volatility around earnings reports, GrainCorp's share price tumbled over -13% following the release of H1 financials. That had more to do with investor concerns about weather forecasts and impact on future crops. As noted by Morgans, the result was largely in-line, albeit weak. Underlying earnings (EBITDA) fell -32%. While better than Ord Minnett expected, this analyst pointed to the erosion of the core cash position, ongoing farm input disruptions from the Middle East conflict, and a poor outlook for the FY27 crop. Macquarie observed elevated working capital to unwind during 2H26, supporting a recovery in core net cash, although weaker operating cash flow and the absence of a special dividend were viewed as reflecting a more uncertain outlook. Management retained FY26 guidance. Three Hold ratings, including one downgrade from Accumulate, plus one Accumulate rating.

JHX - James Hardie Industries IN LINE 0 0 4/1/0 39.14 38.12 5

James Hardie Industries' FY26 result was broadly in line with market expectations, with growth largely driven by the Azek acquisition while underlying market conditions remain subdued. FY27 adjusted EBITDA guidance of US$1.45-1.5bn was provided. Synergies with Azek are on track and have been reiterated. The company expects a return to organic growth in siding and trim, and an above-market performance in decking. Macquarie suggests the outlook statement points to a weak but stabilising US market albeit with US war related costs of -US$80m-US$100m. Citi emphasises a prolonged war in the Middle East could challenge the outlook. Four Buy ratings and one Neutral/Hold.

360 - Life360 MISS 0 0 6/0/0 31.36 30.34 6

Life360 shares slid by over -10% following the release of Q3 financials that revealed softer trends in monthly active users (MAU). Macquarie highlighted strong 1Q Paying Circles growth despite softer MAU trends, with conversion improving even amid Android-related onboarding issues. Resolution of these issues is expected to support growth through FY26, while advertising presents upside, supported by Nativo integration and improving customer spend. Citi cautioned near-term MAU trends remain uncertain and the top end of guidance appears optimistic. Ord Minnett downgrades expected MAU growth to between 17%-20% from 20%. All agree, the market is likely to stay focused on the MAU metric. Four Buy-equivalent ratings.

LNW - Light & Wonder MISS 0 0 8/0/0 195.50 187.13 8

Light & Wonder's Q1 performance missed consensus, mostly because SciPlay disappointed with adjusted earnings (AEBITDA) of -$66m (negative) below a positive $75m estimate while corporate costs were higher. Management reiterated FY26 guidance for mid-to-high single-digit growth in adj earnings (AEBITDA). UBS comments underlying performance remains stronger than headline numbers suggest, with several temporary factors including legal costs, UK iGaming tax changes and Grover Indiana setup costs weighing on results. Macquarie agrees with accelerating the share buyback in the second quarter, which should provide a 5% annualised EPS accretion. While forecasts and target are reduced, seven out of seven ratings remain on Buy.

LTR - Liontown BEAT 3 0 3/3/0 1.95 1.96 6

Liontown Resources reported a smaller-than-expected first-half FY26 loss as lower tax charges and inventory movements offset higher depreciation. FY26 production guidance for Kathleen Valley was reaffirmed, targeting a 1.5Mtpa run rate by the March quarter and 2.8Mtpa by June 2027. Morgans notes the balance sheet strengthened materially following last year's equity raising and conversion of the LG Energy Solution notes. Morgans and Citi upgrade to Neutral/Hold, Ord Minnett upgrades to Accumulate from Hold. Bell Potter and UBS have a Buy. Macquarie is on Neutral. In the aftermath, both Macquarie and UBS upgraded lithium pricing forecasts.

MQG - Macquarie Group BEAT 0 1 2/3/0 240.70 251.26 5

Better investment-related income across markets, commodities and MacCap supported a record half for Macquarie Group, handsomely beating analysts forecasts. Citi notes asset realisations featured strongly, led by the sale of the meters business but also other technology and infrastructure exits. Macquarie is seen hoarding capital to pursue opportunities. UBS points out that while the guidance remains strong, investor attention may shift to earnings growth for FY27, given the elevated base and questions around the sustainability of these results. So far, two Neutral/Hold ratings.

MYR - Myer MISS 0 0 1/1/0 0.68 0.44 2

Myer's FY25 result broadly met Morgan Stanley's expectations, but the accompanying trading update proved rather weak. Ord Minnett had higher expectations. Management's guidance has been maintained for costs. The new marketplace platform is on track for launch in May with expanded product offerings. Morgan Stanley notes ongoing strength in Just Jeans was offset by other brands. A new analyst in charge at Ord Minnett has literally slashed its price target. One Buy and one Hold.

NAB - National Australia Bank MISS 2 0 1/2/3 40.44 39.76 6

Before Budget-related concerns hit the local banking sector, National Australia Bank released H1 financials that slightly fell short of expectations. Revenues underwhelmed as average interest-earning assets were reduced by translation from NZ dollars while cost control featured as a highlight. There was also impact from a large software amortisation charge. Macquarie notes credit quality trends were weaker with non performing loans up around 5bps q/q. NAB management offered stronger guidance for 2H26 including a circa 5bps tailwind from its replicating portfolio but competitive pressures are anticipated to drag again on 2H26 NIM of 1.84%. Both Morgans and Ord Minnett upgraded to less negative ratings, leaving a tally of one Buy, two Neutral/Holds and three Sell-equivalent ratings.

NHC - New Hope MISS 2 0 1/3/0 4.42 5.30 4

Significantly lower coal prices and higher depreciation expenses caused New Hope's H1 performance to significantly miss market expectations. The board tried to offer compensation via a materially higher dividend payout. Broker don't seem to fussed about it, as they continue to see New Hope as well-positioned to deliver low-cost, high-margin cash flow and able to capitalise on a rebound in coal prices, which will then drive stronger cash flow and shareholder returns. War in the Middle East has raised the alarm over energy security and thermal coal is one of the obvious beneficiaries. Both Bell Potter and Macquarie upgrade to Neutral/Hold, joining Morgans and Ord Minnett for four out of four.

NEM - Newmont Corp BEAT 0 0 5/0/0 205.00 203.00 5

Newmont Corp's quarterly revealed gold, silver and copper production above expectations, on lower costs. Operating earnings and free cash flow exceeded forecasts by 16% facilitating a rise in the gold producer's share buyback program by US$6bn. Morgans concludes the result reinforces the company's position as a high-quality cash-generating gold producer with a strong balance sheet and increased capacity to return capital to shareholders. Macquarie highlights higher Brent oil prices would add to the gold producer's costs. At around US$110/bbl, that would add an estimated -US$240m to the cost base, or -US$48/oz, or circa -3% in total. Five brokers, five Buy-equivalent ratings.

NWS - News Corp BEAT 1 0 3/0/0 50.20 52.13 3

News Corp's quarterly update beat consensus on revenue and earnings (EBITDA). Among the stand-outs identified are Dow Jones earnings (EBITDA) with risk and energy the main earnings drivers. Ongoing geopolitical conflicts are attributed as the factor underpinning resilient growth. Move was also highlighted with a beat at the top line due to premium listing in an otherwise weak US housing market. NewsMedia remained "soft" and was affected by the launch of California post. Thus far, UBS on Buy.

ORI - Orica BEAT 0 0 7/0/0 26.19 26.27 7

First half results from Orica beat expectations across all business units, with Morgans noting cash flow was much stronger than previously feared and the balance sheet is in good shape. Macquarie notes management remains confident in securing a cost-effective North American ammonium nitrate supply in coming months. Gold remains the company's largest end market exposure and there is strong demand across blasting, SMC and digital. Morgan Stanley suggests Middle East impacts remain manageable, and faster-growing Digital and Specialty Chemicals continue to lift earnings quality and resilience. Bell Potter adds the majority of benefits from a $100m cost-out program underway is expected to be realised in FY27 and beyond. Seven from seven Buy ratings.

PNR - Pantoro Gold MISS 0 0 3/1/0 6.66 5.49 4

Pantoro Gold posted a first half result slightly better than some forecasts and in line with others, but production guidance for the full year has been downgraded by -15%, driven by multiple factors such as rain at Scotia, equipment/personnel availability, as well as a transition to a new underground mining contractor. A more conservative approach from analysts has reset expectations. With gold prices elevated, Morgans still assesses the leverage to spot prices is significant for an unhedged and debt-free producer. Three Buy ratings with Bell Potter on Hold.

PMV - Premier Investments MISS 0 0 5/1/0 20.23 16.28 6

Premier Investments delivered first half results that were in line with guidance. Macquarie welcomes the greater disclosure in Peter Alexander earnings amid improved trading in the UK. Smiggle disappointed (yet again) and management announced a reset strategy under a new Managing Director appointed. A transition period is expected to weigh on margins despite stable FY26 guidance. Against a challenging consumer backdrop, and with increased competition, UBS argues execution risk is high regarding the strategic reset for struggling Smiggle. Bell Potter highlights the stock is trading at a discount to its coverage, considering the retail division has two global brands, along with equity investments, a land bank and cash position that supports M&A. Four Buy ratings versus Citi on Neutral/Hold.

REA - REA Group IN LINE 0 0 5/1/0 213.43 211.64 6

REA Group's Q3 performance slightly underwhelmed against consensus, but April trading proved stronger-than-expected and management suggesting operational costs can be lowered in face of forward-looking uncertainty was welcomed on the day. Both Citi and UBS attribute much of the 3Q26 misses on timing issues. UBS also mentions impact from -2% deferral in Resi. Thus far, two Buy ratings.

RMD - ResMed BEAT 0 0 6/0/0 46.66 44.41 6

ResMed's Q3 slightly beat forecasts on most metrics, amidst plenty of market doubts and speculation about margin pressures and where potential disappointment might stem from. But while analysts covering the company unanimously label it a "robust" and "better-than-expected" performance, the shares met with selling pressure. Was it because of a slightly dilutive acquisition? Or maybe because long serving CFO, Brett Sandercock, is to retire? We might never find out. Ex-US performed better than the US market. Citi highlights the company is now in deal-making mode. Six Buys out of six.

SKO - Serko MISS 0 0 1/0/0 3.92 2.90 1

Serko's FY26 loss proved larger than anticipated, as higher opex and a lower capitalisation ratio weighed on earnings (EBITDA). Management's FY27 revenue guidance equally underwhelmed. Citi analyst have nevertheless taken a positive view as they still expect revenue growth to accelerate in FY28 as US Defined Corporate revenue scales further and Serko.ai begins contributing to monetisation. So far, one Buy and a higher target.

SM1 - Synlait Milk MISS 0 0 0/1/2 0.72 0.42 3

Synlait Milk's release of interim financials showcased yet another weak performance, and price targets are falling further in response. Macquarie highlights surplus milk processing and inefficiencies drove a sharp gross profit decline. Recovery is expected to take time, as manufacturing execution must improve to restore margins and profitability. Valuation is considered 'cheap' but related to ongoing execution risks and rising debt. Synlait Milk should expect pressure on its balance sheet to ease following the upcoming sale of North Island assets, UBS asserts, although EBIT improvement is likely to be restricted by a2 Milk's internalisation of the English-label infant formula manufacturing in FY27/FY28. Two Sell ratings with Bell Potter on Hold.

TNE - TechnologyOne IN LINE 1 0 5/0/0 31.03 31.69 5

TechnologyOne had upgraded guidance at the AGM in February, showcasing both management's confidence when the world was focused on AI threats and increased visibility in its growth trajectory. The interim result was not 100% perfect, with group sales slightly underwhelming, for example, but that confidence in growth remains undeterred. Guidance has been reiterated. Ord Minnett commented early indicators suggest the company's Plus business is tracking ahead of forecasts with record adoption and evidence of annual recurring revenue upside. Combined with its usage-based pricing model and 35-plus years of workflow data, Ord Minnett believes advances in AI are enhancing the company's defensive qualities related to AI disruption rather than adding a risk of displacement. Others don't disagree with that assessment. Four Buys and Morgans has upgraded to Accumulate from Hold.

TUA - Tuas BEAT 0 0 2/0/0 9.98 9.98 2

Tuas reported underlying EBITDA of $42m (excl. transaction costs of -$10.5m), up 27% yoy and ahead of analysts' forecasts. The 'beat' was driven by stronger than expected revenue ($5m higher) partially offset by lower than expected gross margin. No fresh news was forthcoming on the M1 transaction other than to mention engagement with IMDA remains ongoing. As Citi points out, this deal remains the number one catalyst for the stock. Morgan Stanley suggests there is a range of incremental synergy opportunities if the M1 deal is completed, and the catalyst will be the timing and completion of it, following a lengthy process. Two Buy ratings.

WJL - Webjet Group MISS 0 0 0/2/0 0.64 0.43 2

Webjet Group posted a FY26 result that was weaker than Ord Minnett expected, reflective of a deteriorating operating environment in the fourth quarter. Morgans notes it was strictly taken in line with guidance, but weak nevertheless. Both brokers have taken a chainsaw to their forecasts reflecting weaker trading conditions and ongoing investment in the business. Ord Minnett highlights the FY27 outlook is affected by challenges in both economic and industry conditions amid materially lower airline commissions and surcharging payment bans. Near-term catalysts remain elusive in the absence of a return of takeover interests. Separately, the company announced Virgin Australia ((VGN)) will substantially reduce commission payments on Virgin Australia products or for achieving specified performance targets, effective July 1.

WAF - West African Resources MISS 0 0 1/0/0 4.90 4.00 1

West African Resources' 2025 performance missed Macquarie's forecast by -7% on higher tax expenses and higher other costs. Operating cash flow including exploration beat Macquarie and consensus by 16%/9%, respectively, with total capex lower than both estimates. Management did not offer any guidance for 2026 and has indicated updated reserves, resources and a 10-year production target will be released by the end of 1Q2026. One Buy.

WBC - Westpac IN LINE 1 0 0/1/4 35.08 33.61 5

Westpac's interim reports had pluses and minuses, but proved all-in-all broadly in line with expectations as revenue trends were weaker, though partially offset by better cost control. Morgan Stanley sees emerging risks of an earnings downgrade cycle, with the volume/margin trade-off becoming more apparent and limited scope for cost improvements relative to peers. Macquarie states risks are building for banks generally around slowing volumes from higher rates and a softer economy, alongside more intense competition and deteriorating credit quality. Citi questions whether management is sacrificing NIMs for higher growth than peers. Citi on Neutral stands out against four Sell-equivalent ratings.

XRO - Xero BEAT 0 0 6/0/0 144.08 137.74 6

Xero's FY26 was overshadowed by an announcement from Anthropic, which explains the heavy sell-off in its shares on the day. That was corrected on the following day as the result itself, if anything, was mostly better-than-expected. Of course, the key question for investors remains whether AI is more an opportunity or a threat for the company. Morgans concludes it is early days for AI, although management appears confident enough to have announced a buyback and hint at potential capital management in FY28. Most analysts lauded the accelerating growth in the US, where acquired Melio also performed strongly. Management's FY27 guidance is generally viewed as conservative. Six out of six Buy ratings.

Total: 40

ASX50 TOTAL STOCKS:

10

Beats

4

 40.0% 

In Line

4

 40.0% 

Misses

2

 20.0% 

Total Rating Upgrades:

6

Total Rating Downgrades:

1

Total target price movement in aggregate:

-1.15%

Average individual target price change:

-1.93%

Beat/Miss Ratio:

2.00

ASX200 TOTAL STOCKS:

29

Beats

11

 37.9% 

In Line

7

 24.1% 

Misses

11

 37.9% 

Total Rating Upgrades:

15

Total Rating Downgrades:

6

Total target price movement in aggregate:

-1.27%

Average individual target price change:

-2.69%

Beat/Miss Ratio:

1.00

Yet to Report

Indicates that the company is also found on your portfolio

SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/18'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/18'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Monday
18 May

FY26 earnings report


1H26 earnings report


1H26 earnings report


SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/19'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/19'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Tuesday
19 May

earnings report


earnings report


1H26 earnings report


SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/20'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/20'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Wednesday
20 May

FY26 earnings report


FY26 earnings report


earnings report


earnings report


SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/21'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/21'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Thursday
21 May

earnings report


earnings report


earnings report


earnings report


FY26 earnings report


FY26 earnings report


SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/22'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/22'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Friday
22 May
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/25'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/25'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Monday
25 May

FY26 earnings report


SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/26'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/26'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Tuesday
26 May

FY26 earnings report


FY26 earnings report


FY26 earnings report


earnings report


earnings report


SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/27'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/27'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Wednesday
27 May

1H26 earnings report


earnings report


earnings report


SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/28'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/28'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Thursday
28 May

earnings report


earnings report


earnings report


earnings report


earnings report


SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/29'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/05/29'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Friday
29 May

earnings report


earnings report


SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/01'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/01'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Monday
1 June
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/02'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/02'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Tuesday
2 June
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/03'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/03'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Wednesday
3 June
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/04'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/04'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Thursday
4 June
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/05'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/05'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Friday
5 June
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/08'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/08'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Monday
8 June
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/09'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/09'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Tuesday
9 June
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/10'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/10'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Wednesday
10 June
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/11'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/11'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Thursday
11 June
SELECT calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone, max(p.portfolioID) as portfolioID,
sec.sector,CASE WHEN (sec.sectorurl IS NULL OR sec.sectorurl = '')
THEN 'sector'
ELSE sec.sectorurl
END as SectorURL   
FROM (
select seasonReport,calendarID, source, externalID, title, symbol, itemdate, isDisplayed, 1 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/12'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol != '')
UNION
select seasonReport,calendarID, source, externalID, title, type AS symbol, itemdate, isDisplayed, 0 as display, timezone
from calendar c left join countrycode cc on c.type = cc.code
where convert(varchar(10),itemDate,111) = '2026/06/12'
AND isDisplayed = 1
AND seasonReport = 1
AND (symbol = '') 
) AS calendar
left join (select p.* from portfolio p inner join customerportfolio cp on p.CustomerPortfolioID = cp.CustomerPortfolioID where cp.customerid = '' and cp.archived is NULL) 
p on calendar.symbol = p.symbol
LEFT JOIN (SELECT sr.symbol, s.sector,s.sectorID,dbo.RemoveNonAlphaCharacters(s.sector) as sectorurl FROM sector s 
INNER JOIN SectorRelationship sr on s.sectorID = sr.sectorID 
WHERE isPriority = 1) AS sec on calendar.symbol = sec.symbol
GROUP BY calendar.calendarID,calendar.source,calendar.externalID,
calendar.title,calendar.symbol,calendar.itemdate,calendar.isDisplayed,
calendar.display,calendar.timezone,sec.Sector,sec.sectorurl
ORDER BY calendar.display, calendar.timezone desc, calendar.symbol, calendar.title 
Friday
12 June

Listed Companies on the Calendar

Date Code
21/05/2026AACearnings report
21/05/2026AFPearnings report
18/05/2026ALQFY26 earnings report
26/05/2026ARXFY26 earnings report
28/05/2026ARXearnings report
20/05/2026CATFY26 earnings report
26/05/2026CIAFY26 earnings report
28/05/2026CIAearnings report
18/05/2026ELD1H26 earnings report
29/05/2026FNDearnings report
25/05/2026FPHFY26 earnings report
Date Code
18/05/2026GTK1H26 earnings report
26/05/2026IFTFY26 earnings report
28/05/2026IKEearnings report
20/05/2026JHXFY26 earnings report
19/05/2026JNSearnings report
27/05/2026NUF1H26 earnings report
21/05/2026OCAearnings report
19/05/2026OFXearnings report
29/05/2026PEBearnings report
20/05/2026PLTearnings report
28/05/2026RCLearnings report
Date Code
26/05/2026RYMearnings report
28/05/2026SHVearnings report
20/05/2026SKOearnings report
27/05/2026SMPearnings report
26/05/2026STGearnings report
19/05/2026TNE1H26 earnings report
21/05/2026TWRearnings report
21/05/2026WEBFY26 earnings report
27/05/2026WEBearnings report
21/05/2026WJLFY26 earnings report