I need to find and replace some patterns in some files, but I need it to return 1 or something if a pattern is not found.
Can I do this with sed alone or do I need to check whether the pattern exists with another command?
Any suggestions?
Check out this answer: How to check if sed has changed a file.
Its pretty much the same as you are asking, its suggesting you use awk or output to a different file and diff the two files. 
sed, I would start with the least voted answers which use sed's q command to set the exit code. (Sadly q's exit code argument is not POSIX compliant.)
                
                Sed processes commands in sequence for each pattern space.  If you search for the good pattern using addressing, you can use the q command within sed to return a positive value.
sed '/if-the-pattern-space-has-this/<do this command>' <file>
After that command ends (delimited with the ; in this case) the next command would run (provided you have not yet terminated by finding the previous pattern.
The last command $q 1 is using sed addresses, the dollar sign indicating that this command run only on the last line of the file.  If you found the good pattern already on the last line of the file then you would have exited already, so this is only hit as a last resort.  If that's the case then you then return your negative pattern.
> sed -n '/good-pattern/q 0;$q 1' <<< "bad-pattern"
> echo $?
1
> sed -n '/good-pattern/q 0;$q 1' <<< "good-pattern"
> echo $?
0
This can be useful if you use your addressing to look for only a pattern match within a region of the file, which is something that grep would struggle to easily express (in fairness sed doesn't do it without some dancing).
This example looks for a section of the file that starts with ^block: and ends on an empty line, and returns truthy if the word crazy is found within that block:
sed -n '/^block:/,/^$/{/crazy/q 0};$q 1' <<END && echo -e "\n--------------\n FOUND" || echo "\n----------------\n NOT FOUND"
this thing
block:
   is crazy
END
--------------
 FOUND
The example has the word crazy listed outside of the ^block: to <empty line> scope and as a result returns false.
> sed -n '/^block:/,/^$/{/crazy/q 0};$q 1' <<END && echo -e "\n--------------\n FOUND" || echo -e "\n----------------\n NOT FOUND"
this thing
block:
   is crazy
END
----------------
 NOT FOUND
If you wanted to return positive or negative depending on if some changes were made while also making the changes I would recommend something like the following:
sed file: substitutions.sed
# Searching for the word "crayons", replace this
# with "pizza" to see a positive match.  The replacement
# word is "meanies", which you can also replace.
s/crayons/meanies/
# We print each line regardless of a pattern match
p
# If the most recent 's' command did a substitution, take
# the branch to the loop.
t loop
# If we're not on the last line, delete the pattern space and
# start processing the next line.
$!d
# This only happens on the last line.  If we get here, swap the
# last hold space in and then return positive or negative based
# on the content in the hold space.  The hold space should only
# have matching content if we matched once before and swapped
# the matching pattern into the hold space.
x
/meanies/q 0
# If we don't match the replacement pattern then return falsy.
q 1
# This loop is only taken on a positive match, effectively
# just swapping the most recent match into the hold space.
:loop
x
data file: data.txt
file has some                    
content, be kind pizza           
don't eat pizza after 8           
because of the pepperoni monsters
sed command:
sed -nf substitutions.sed data.txt && echo -e '\nGood' || echo -e '\nBad'
Note that the sed command uses -n to indicate that the pattern space is not printed out each time you get to the end of the sed script.  -f indicates you read the sed commands from the following file.
If you wanted to be crazy, you could wrap this in a shell script by using sed as the interpreter (discovering its location with which sed).  I omitted the comments this time for brevity and replaced "crayons" as the replacement pattern with "pizza".
shell script: sed.sh
#!/usr/bin/sed -nf
s/pizza/meanies/ 
p                
t loop           
$!d              
x                
/meanies/q 0     
q 1              
                 
:loop            
x                
invoke with:
> ./sed.sh data.txt
file has some
content, be kind meanies
don't eat meanies after 8
because of the pepperoni monsters
> echo $?
0
sed to do a grep. (4) Your command (after the error is fixed) will exit upon finding a pattern.  That’s fine if you are trying to emulate grep -q, but not if you want to replace all occurrences of a pattern.