It is usually a bad idea to try and mix biblatex-apa with other styles or to modify it heavily: biblatex-apa is supposed to be used as style=apa, so that bibliography and citation style are both apa. It is quite a complex style that does a lot of work to implement the requirements of the APA manual which means that some choices in the code sacrifice customisability in favour of an accurate implementation of the complex APA rules. There are also some (implicit) dependencies between the bibliography and citation style. If you need an author-year style that is not APA style it is usually a better choice to start from one of the standard styles.
The "&" in an apa-style bibliography is controlled by two delimiters: the standard finalnamedelim and the apa-specific finalnamedelim:apa:family-given. Both need to be redefined. The original definition can be found in ll. 602-624 of apa.bbx, we just change all \&s to \bibstring{and}.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{csquotes}
\usepackage[
backend=biber,
sorting=nyt,
citestyle=authoryear,
bibstyle=apa,
maxbibnames=99,
apamaxprtauth=99,
maxcitenames=3,
uniquelist=false,
uniquename=false]{biblatex}
\renewcommand{\labelnamepunct}{\addspace}
\DeclareDelimFormat[bib]{finalnamedelim}{%
\ifthenelse{\value{listcount}>\maxprtauth}
{}
{\ifthenelse{\value{liststop}>2}
{\finalandcomma\addspace\bibstring{and}\space}
{\addspace\bibstring{and}\space}}}
\DeclareDelimFormat[bib]{finalnamedelim:apa:family-given}{%
\ifthenelse{\value{listcount}>\maxprtauth}
{}
{\ifthenelse{\ifcurrentname{groupauthor}\AND%
\value{liststop}=2}
{\addspace\bibstring{and}\space}
{\finalandcomma\addspace\bibstring{and}\space}}}
\usepackage{xpatch}
\xpatchbibdriver{article}
{\usebibmacro{title}%
\newunit}
{\usebibmacro{title}%
\printunit{\addcomma\space}}
{}
{}
\AtEveryBibitem{\clearfield{number}}
\DeclareFieldFormat[article]{volume}{\apanum{#1}}
\renewbibmacro*{journal+issuetitle}{%
\usebibmacro{journal}%
\setunit*{\space}%
\iffieldundef{series}
{}
{\newunit
\printfield{series}%
\setunit{\addspace}}%
\usebibmacro{volume+number+eid}%
\setunit{\addspace}%
\usebibmacro{issue}%
\setunit{\addcolon\space}%
\usebibmacro{issue}%
\newunit}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson}
\printbibliography
\end{document}

This answer assumes you are using a current version of biblatex-apa (at least v9.0 from 2019-11-23) that implements 7th-edition APA style.
If you are using an older version of biblatex-apa that still implements 6th-edition APA style or you are using a current version of biblatex-apa6 (style=apa6,), you may need
\DeclareDelimFormat[bib,biblist]{finalnamedelim}{%
\ifthenelse{\value{listcount}>\maxprtauth}
{}
{\ifthenelse{\value{liststop}>2}
{\finalandcomma\addspace\bibstring{and}\space}
{\addspace\bibstring{and}\space}}}
\DeclareDelimFormat[bib,biblist]{finalnamedelim:apa:family-given}{%
\ifthenelse{\value{listcount}>\maxprtauth}
{}
{\finalandcomma\addspace\bibstring{and}\space}}
Some citation commands also use "&", if you want to get rid of those as well, you additionally need
\DeclareDelimFormat[parencite,nptextcite,fullcite,fullcitebib]{finalnamedelim}
{\ifnum\value{liststop}>2 \finalandcomma\fi\addspace\bibstring{and}\space}
That should work for older and newer versions of biblatex-apa and biblatex-apa6 alike.